Java 为什么writeInt(int v)在文件中显示为符号,而writeBytes(字符串s)在文件中正确显示?

Java 为什么writeInt(int v)在文件中显示为符号,而writeBytes(字符串s)在文件中正确显示?,java,Java,我试图理解为什么当我使用此代码时(使用writeInt(int v)),我会在创建的文件中获得符号 public class Write { public static void main(String[] args) { try { //create FileOutputStream object FileOutputStream fos = new FileOutputStream("v.txt"); Dat

我试图理解为什么当我使用此代码时(使用
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个二进制“数字”块)。十六进制很漂亮,因为每个十六进制“数字”恰好对应四个二进制“数字”


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

您认为整数2323是什么字符?很抱歉,我对编程比较陌生,我不理解您的问题。您正在将32位整数写入文件,整数是2323。如果您将该文件视为文本,则无论您使用何种字符系统来查看该文件,您都会得到任何字符0x913。@Vibhukapor您能否在写入数据后向我们提供
v.txt
文件中的输出?整数2323应显示为ascii码0、0、9、19(NUL NUL HT DC3)以那样或那样的顺序。它应该做的事情是使用数字的二进制表示,并以8位块的形式输出这些数字。您不应该在输出中看到字符串2323。想想看,它应该如何在该方法被记录为输出的4字节输出中显示一个数字为12345?