gpt4 book ai didi

java - 在 Java 中读取二进制文件时如何检查空字节分隔符?

转载 作者:行者123 更新时间:2023-11-30 04:13:14 26 4
gpt4 key购买 nike

我正在努力提高我的二进制 IO 技能,因此正在编写一个简单的实用程序来读取 mobi 格式的电子书并打印前 32 个字节以显示书名。

Palm 数据库格式规定二进制文件的前 32 个字节包含数据库/书籍名称,并且该名称以 0 结尾。

我不知道如何检查我读取的字节是否以 null 结尾。

File file = new File("ebook.mobi");
DataInputStream in = new DataInputStream(new FileInputStream(file));

int count = 1;
while(count++ <= 32){
System.out.print((char)in.readByte());
}
in.close();

在这种情况下,输出打印:

Program_or_Be_Programmed <--- this is immediately followed by a number of square symbols

我尝试更改 while 循环但无济于事:

while(count++ < 32 || in.readByte != 0)

我想添加一些语句来在遇到 0 字节时停止循环打印字符。

我该如何实现这个?

最佳答案

这是您所说的尝试过的代码:

while(count++ <= 32 || in.readByte != 0){
System.out.print((char)in.readByte());
}

DataInputStream 被读取两次,一次在 while boolean 检查中,另一次在正文中。

尝试:

byte b = 0;
while(++count < 32 && (b=in.readByte()) != 0){
System.out.print((char)b);
}

请注意,++count 比 count++ 占用的资源更少,因为它不会创建重复项。

回答有关空字节的问题:ascii (NUL) 中的空值,'\0' 当显示为符号时,由值 0 表示。它是行尾 (EOL) 字符,并附加到字符串自动。

更具体地说:

char c = '\0';
byte b = (byte) c; //b == 0

关于java - 在 Java 中读取二进制文件时如何检查空字节分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19092596/

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