gpt4 book ai didi

java - 逐字节读取二进制文件

转载 作者:行者123 更新时间:2023-11-30 08:21:12 25 4
gpt4 key购买 nike

我一直在研究我遇到的一个 Java 问题,但没有成功。我在 StackOverflow 上阅读了一大堆类似的问题,但解决方案似乎并没有按预期工作。

我正在尝试逐字节读取二进制文件。

我用过:

while ((data = inputStream.read()) != -1) 

循环...

for (int i = 0; i < bFile.length; i++) {

循环...

但我只得到空的或空白的输出。我试图读取的文件的实际内容如下:

¬í sr assignment6.PetI¿Z8kyQŸ I ageD weightL namet Ljava/lang/String;xp > @4 t andysq ~ @bÀ t simbasq ~ @I t wolletjiesq ~
@$ t rakker

我只是试图逐字节读取它,并使用以下行将其提供给字符数组:

char[] charArray = Character.toChars(byteValue);

这里的 Bytevalue 表示它正在读取的字节的 int。

哪里出了问题?

最佳答案

自 java 7 起不再需要逐字节读取,Files 中有两个实用函数:

Path path = Paths.get("C:/temp/test.txt");

// Load as binary:
byte[] bytes = Files.readAllBytes(path);
String asText = new String(bytes, StandardCharset.ISO_8859_1);

// Load as text, with some Charset:
List<String> lines = Files.readAllLines(path, StandardCharsets.ISO_8859_1);

如果您想读取二进制数据,可以使用 readAllBytes

字符串和字符用于文本。与许多其他编程语言相反,这意味着 Unicode,因此可以组合世界上所有的脚本。 char 是 16 位,而不是 8 位 byte

对于纯 ASCII,Unicode/UTF-8 的 7 位子集,byte 和 char 值是相同的。

那么你可能做了以下(低质量代码):

int fileLength = (int) path.size();
char[] chars = new char[fileLength];
int i = 0;
int data;
while ((data = inputStream.read()) != -1) {
chars[i] = (char) data; // data actually being a byte
++i;
}
inputStream.close();

String text = new String(chars);

System.out.println(Arrays.toString(chars));

您遇到的问题可能与 java 中笨重的固定大小数组有关,并且 char[] 仍然不是 String

对于二进制用法,因为您似乎正在读取序列化数据,您可能希望转储文件:

int i = 0;
int data;
while ((data = inputStream.read()) != -1) {
char ch = 32 <= data && data < 127 ? (char) data : ' ';
System.out.println("[%06d] %02x %c%n", i, data, ch);
++i;
}

转储文件位置、十六进制值和字符值。

关于java - 逐字节读取二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25378938/

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