簡體   English   中英

如何在仍寫入文件的同時將文件拆分為多個塊?

[英]How to split file into chunks while still writing into it?

我試圖從文件創建字節數組塊,而過程仍在使用文件進行寫入。 實際上,我正在將視頻存儲到文件中,並且我想在錄制時從同一文件創建塊。

應該使用以下方法從文件讀取字節塊:

private byte[] getBytesFromFile(File file) throws IOException{
    InputStream is = new FileInputStream(file);
    long length = file.length();

    int numRead = 0;

    byte[] bytes = new byte[(int)length - mReadOffset];
    numRead = is.read(bytes, mReadOffset, bytes.length - mReadOffset);
    if(numRead != (bytes.length - mReadOffset)){
        throw new IOException("Could not completely read file " + file.getName());
    }

    mReadOffset += numRead;
    is.close();
    return bytes;
}

但是問題在於所有數組元素都設置為0,我想這是因為寫入過程會鎖定文件。

如果你們中的任何人可以在寫入文件時展示任何其他方式來創建文件塊,我將非常感謝。

解決了問題:

private void getBytesFromFile(File file) throws IOException {
    FileInputStream is = new FileInputStream(file); //videorecorder stores video to file

    java.nio.channels.FileChannel fc = is.getChannel();
    java.nio.ByteBuffer bb = java.nio.ByteBuffer.allocate(10000);

    int chunkCount = 0;

    byte[] bytes;

    while(fc.read(bb) >= 0){
        bb.flip();
        //save the part of the file into a chunk
        bytes = bb.array();
        storeByteArrayToFile(bytes, mRecordingFile + "." + chunkCount);//mRecordingFile is the (String)path to file
        chunkCount++;
        bb.clear();
    }
}

private void storeByteArrayToFile(byte[] bytesToSave, String path) throws IOException {
    FileOutputStream fOut = new FileOutputStream(path);
    try {
        fOut.write(bytesToSave);
    }
    catch (Exception ex) {
        Log.e("ERROR", ex.getMessage());
    }
    finally {
        fOut.close();
    }
}

如果是我,我將通過寫入文件的進程/線程對它進行分塊。 無論如何,這都是Log4j似乎做到的方式。 應該有可能使OutputStream每隔N個字節自動開始寫入新文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM