繁体   English   中英

用Java中的块将字节写入文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM