gpt4 book ai didi

java - 从文件中读取(按位),然后再次写入文件

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

我不知道如何使用 I/O。

我正在使用此代码从文件中读取:

if (file.length() > Integer.MAX_VALUE) {
throw new IllegalArgumentException("File is too large: " + file.length());
}

int len = (int) file.length();
System.out.println("failo dydis yra = "+len);
FileInputStream inputStream = new FileInputStream(file);

try {
byte[] fileBits = new byte[len];
for (int pos = 0; pos < len;) {
int n = inputStream.read(fileBits, pos, len - pos);

if (n < 0) {
throw new EOFException();
}
pos += n;

}
for(int q=0; q<len; q++){
char ch = (char)fileBits[q];
int sk = (int)ch;
System.out.println("symbol = "+fileBits[q]+" - "+ch+" - "+sk);
}

当我读取 txt 文件时,一切都很好,但是当我读取非 txt 例如图像时,我得到类似的结果:

symbol = -78 - ᄇ - 65458
symbol = 52 - 4 - 52
symbol = -91 - ᆬ - 65445
symbol = 80 - P - 80
symbol = -118 - ハ - 65418
symbol = 76 - L - 76
symbol = 122 - z - 122
symbol = 78 - N - 78
symbol = 112 - p - 112
symbol = 97 - a - 97
symbol = 56 - 8 - 56
symbol = -112 - ミ - 65424

所以我不明白为什么会有减号?为什么当我想转换回来时我得到这个 65***。

如果我想将这些字节转换为字符,使用它们并再次写入文件,也许我必须读取不同的内容。

谢谢。

最佳答案

So i can't figure why there are minus ?

在 Java 中,a byte can have values between -128 and 127 。因此,您会看到负值。您可以使用 0xff & fileBits[q] 将其转换为 0 到 256 之间的整数值。

And why when i want to convert back i get this 65***

将字节转换为字符是没有意义的,除非该字节恰好是 ASCII 兼容编码中的 ASCII 字符字符串的一部分。所发生的情况是,Java 将字节的第一位扩展为 16 位值。如果第一位恰好被设置(即数字为负数),则结果将是高 16 位数字,通常采用 65xxx 的形式。

一切工作正常,只需将字节提供给图像处理/显示函数即可。请注意,您的函数很容易出错,因为如果您在读取文件时文件大小发生变化,它会不必要地失败。如果要读取字符串,请使用 Reader对象,例如 InputStreamReader .

关于java - 从文件中读取(按位),然后再次写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9964972/

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