gpt4 book ai didi

java - 为什么 writeInt(int v) 在文件中显示为符号,而 writeBytes(String s) 在文件中显示正确?

转载 作者:行者123 更新时间:2023-11-30 03:22:16 27 4
gpt4 key购买 nike

我试图理解为什么当我使用此代码(使用 writeInt(int v))时,我在创建的文件中得到符号。

public class Write {
public static void main(String[] args) {
try {
//create FileOutputStream object
FileOutputStream fos = new FileOutputStream("v.txt");
DataOutputStream dos = new DataOutputStream(fos);
int str = 2323;
dos.writeInt(str);
dos.close();
} catch (IOException e) {
System.out.println("IOException : " + e);
}
}
}

但是当我使用 writeBytes(String s)writeUTF(String s) 时,我在文件中得到了正确的字符串。我读到 writeBytes 将原始数据 byte 转换为字节序列,那么为什么我不能使用此方法获得使用之前的代码获得的符号呢?

public class Write {
public static void main(String[] args) {
try {
//create FileOutputStream object
FileOutputStream fos = new FileOutputStream("v.txt");
DataOutputStream dos = new DataOutputStream(fos);
String str = "hello";
dos.writeBytes(str);
dos.close();
} catch (IOException e) {
System.out.println("IOException : " + e);
}
}
}

我还读到 writeBytes 忽略了每个字符的 8 个高位,但是我没有看到我输入的字符串和文件中的任何区别,所以任何人都可以解释一下是什么这意味着忽略 8 位吗?

最佳答案

结果符合预期。数字 1094861636 的十六进制恰好是 41424344,A、B、C 和 D 的 ASCII 码恰好是十六进制的 41、42、43、44。

writeInt 的作用是将数字分解为二进制格式并输出字节(8 个二进制“数字” block )。十六进制很漂亮,因为每个十六进制“数字”恰好对应于四个二进制“数字”。

您可能想要做的是使用writeStr(Integer.toString(yourNumber))Integer.toString 将整数转换为其人类可读的形式,而 writeInt 生成更计算机可读的形式。

关于java - 为什么 writeInt(int v) 在文件中显示为符号,而 writeBytes(String s) 在文件中显示正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31069333/

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