gpt4 book ai didi

Java - 尝试写入文件 2 次或更多次时出现 BufferOverflowException

转载 作者:行者123 更新时间:2023-12-01 08:52:25 27 4
gpt4 key购买 nike

我正在尝试编写一个程序,该程序一次可以获取 1 位,然后在“收集”16 位后将 2 个字节写入文件。

这是基本代码:

public void addBit(int bit) throws IOException{
if(this.byteholder.length() < 16){
this.byteholder += "" + bit;
}
else{
write();
}
}

public void write() throws IOException{
if(this.byteholder.length() == 16){
System.out.println(this.byteholder);
int a = Integer.parseInt(byteholder, 2);
System.out.println(Integer.toBinaryString(a));
ByteBuffer bytes = ByteBuffer.allocate(2).putInt(a);
byte[] byteArray = bytes.array();

out.write(byteArray);
out.flush();
this.byteholder = "";
}


}

public static void main(String[] args) {
try {
File f = new File("test");
BitFileWriter out = new BitFileWriter(f);
for(int i=0; i<2; i++){
out.addBit(1);
out.addBit(0);
out.addBit(0);
out.addBit(1);
out.addBit(0);
out.addBit(1);
out.addBit(1);
out.addBit(0);
out.addBit(1);
out.addBit(0);
out.addBit(0);
out.addBit(1);
out.addBit(0);
out.addBit(1);
out.addBit(1);
out.addBit(0);
}

out.close();

} catch (IOException e) {
e.printStackTrace();
}

}

main方法仅用于测试上述方法。 “out”变量是一个 FileOutputStream,“byteholder”是一个保存二进制代码的字符串,文件“test”是我在 Eclipse 项目目录中的随机空文件。

我遇到的问题是,如果我多次运行测试代码(多次循环 addbit 代码),我会收到 BufferOverflowException 并且我不知道为什么。我不确定如何正确使用 ByteBuffer,但我需要它能够一次向文件写入 2 个字节。有人可以帮忙吗?谢谢。

还有一个额外的问题!每当我成功运行测试代码时,我都可以看到“测试”文件中的文件大小没有变化(仍然是 0 字节)。为什么?。顺便说一句,我运行的是 Windows 10。

编辑:这是我的堆栈跟踪:

Exception in thread "main" java.nio.BufferOverflowException
at java.nio.Buffer.nextPutIndex(Unknown Source)
at java.nio.HeapByteBuffer.putInt(Unknown Source)
at CompPck.BitFileWriter.write(BitFileWriter.java:30)
at CompPck.BitFileWriter.addBit(BitFileWriter.java:21)
at CompPck.BitFileWriter.main(BitFileWriter.java:66)

最佳答案

ByteBuffer.allocate(2).putInt(a);

您为 4 个字节的 int 分配了 2 个字节。您预计会发生什么?如果您想使用 16 位值,请使用 short(和 putShort)。

如果您因符号问题而在使用 Short 时遇到问题(1001011010010110 被认为超出了 Short 的值),您可以将 a 保留为 int,但使用 putShort((short)a) 写入值。

至于您的文件保持为空,您可能没有在 close() 方法中正确关闭资源,或者您忘记将您的缓冲区写入文件。

关于Java - 尝试写入文件 2 次或更多次时出现 BufferOverflowException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42301728/

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