有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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中处理这种情况吗?非常感谢您的帮助,提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    所以我不确定你是否理解你要解决的问题。但现在第一条沟渠是OutputStream。我们可以使用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();
        }
    }
    

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