在java中用块将字节写入文件

时间:2014-03-26 23:42:56

标签: java algorithm file byte

我正在编写一个应用程序,其结果是一个文件,这个文件由块处理的字节块组成,因此目标是处理一个块将其转换为字节并将该块字节写入(追加)到文件然后处理下一个块,依此类推..直到它完成所有块的所有字节都存储到文件中,我一直在尝试使用下面的代码:

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中处理这种情况有任何想法吗?感谢任何帮助,提前谢谢。

1 个答案:

答案 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();
    }
}

在阅读了部分问题之后,我想知道你是否只是在两个流之间复制字节,这使得这个更简单,你不必担心块本身。