gpt4 book ai didi

java - 在java中通过 block 将字节写入文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:06:32 26 4
gpt4 key购买 nike

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

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包含当前 block 的字节

这里的问题是它没有附加所有字节,只保留最后一个字节 block ..我需要将所有字节都“连接”起来,以使该文件的结果字节数..

您知道如何在 Java 中处理这种情况吗?将不胜感激任何帮助,在此先感谢。

最佳答案

所以我不确定您是否理解您要解决的问题。但现在先放弃 ObjectOutputStream。我们可以使用 OutputStream(或 DataOutputStream)来写入字节。

当您谈到将字节 block 写入文件时,您必须回答这个问题:所有 block 的大小都一样吗?这非常重要,因为如果您编写的 block 具有不同的长度,您将无法读回它,因为您不知道 block 的开始和结束位置。在阅读之前,您需要知道下一个 block 的大小。如果是修改代码的固定 block 大小,但是固定 block 大小有一个 block 不能大于 block 大小的限制。

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

在阅读了您的问题的一部分之后,我想知道您是否只是在两个流之间复制字节,这使得这更简单,并且您实际上不必担心 block 本身。

关于java - 在java中通过 block 将字节写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22675394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com