我正在编写一个应用程序,其结果是一个文件,这个文件由块处理的字节块组成,因此目标是处理一个块将其转换为字节并将该块字节写入(追加)到文件然后处理下一个块,依此类推..直到它完成所有块的所有字节都存储到文件中,我一直在尝试使用下面的代码:
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中处理这种情况有任何想法吗?感谢任何帮助,提前谢谢。
答案 0 :(得分:1)
因此,我不确定您是否理解了您尝试解决的问题。但是现在第一个沟渠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();
}
}
在阅读了部分问题之后,我想知道你是否只是在两个流之间复制字节,这使得这个更简单,你不必担心块本身。