[英]Writing bytes into a file by blocks in java
我目前正在编写一个应用程序,该应用程序的结果是一个文件,该文件由按块处理的字节块组成,因此目标是处理一个块,将其转换为字节,然后将该字节块写入(附加)到文件中,然后进行处理下一个块,依此类推..直到将所有块的所有字节存储到文件中为止,我一直在尝试使用以下代码:
try (ObjectOutputStream oos = new ObjectOutputStream(file)) {
oos.writeObject(bytestobwritten);
oos.flush();
oos.close();
stat = 1;
} catch(FileNotFoundException ex) {
Logger.getLogger(Filer.class.getName()).log(Level.WARNING, "Error by writing block of bytes", ex);
} //end catch
上面的代码在while结构内部,该结构处理字节,待写入的变量bytestobwritten
包含当前块的字节
这里的问题是,它不附加所有字节,而是仅保留字节的最后一块。.我需要将所有字节“连接”以使该文件的结果字节数成为可能。
您对如何处理Java中的这种情况有任何想法吗? 将不胜感激,在此先感谢您。
因此,我不确定您是否了解要解决的问题。 但是现在先放弃ObjectOutputStream。 我们可以使用OutputStream(或DataOutputStream)写入字节。
当您谈论将字节块写入文件时,您必须回答以下问题:所有块的大小都相同吗? 这一点非常重要,因为如果您编写不同长度的块,您将无法读回它,因为您不知道块的开始和结束位置。 阅读前,您需要知道下一个块的大小。 如果更改代码的是固定块大小,但是固定块大小有一个限制,即任何一个块都不能大于该块大小。
public saveBLocks( List<Block> blocks ) {
DataOutputStream stream = new DataOutputStream( new FileOutputStream( "someFile.txt" ) );
try {
for( int i = 0; i < blocks.size(); i++ ) {
byte[] buffer = createBuffer( blocks.get(i) );
// save out the block size to the stream if we have varying block size
stream.writeInt( buffer.length );
// save the block, assumes buffer is the exact size of the block
stream.write( buffer, 0, buffer.length );
}
stream.flush();
} finally {
stream.close();
}
}
看完部分问题后,我想知道您是否只是在两个流之间复制字节,这使此过程变得更简单,并且您实际上不必担心块本身。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.