Java 将ByteArrayOutputStream的输出显示为整数

Java 将ByteArrayOutputStream的输出显示为整数,java,Java,文件fos1.txt中的结果输出是d,但我希望文件中的ti是100,我如何才能做到这一点 public class Byteo { public static void main(String[] args) { try { FileOutputStream fos1 = new FileOutputStream("G:\\fos1.txt"); ByteArrayOutputStream bos = new Byt

文件fos1.txt中的结果输出是d,但我希望文件中的ti是100,我如何才能做到这一点

public class Byteo {

    public static void main(String[] args) {

        try {
            FileOutputStream fos1 = new FileOutputStream("G:\\fos1.txt");


            ByteArrayOutputStream bos = new ByteArrayOutputStream();
        int x = 100;

            bos.write(x);       


            try {

                bos.writeTo(fos1);

                bos.flush();
                bos.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }

}
write(intb)
intx=100
解释为字节码,因此将编码字节写入文件

写入(int b) 将指定的字节写入此字节数组输出 小溪

你可以这样做:

  ByteArrayOutputStream bos = new ByteArrayOutputStream();
  int x = 100;
  bos.write(String.valueOf(x).getBytes(StandardCharsets.UTF_8)); 

这里不需要使用ByteArrayOutputStream。更好的方法是使用writer,它为您处理大部分转换,并显式声明从CharSequence转换为字节时要使用的编码:

public static void main(String[] args) {
  String path = "...";

  int x = 100;

  try (Writer writer = new OutputStreamWriter(new FileOutputStream(path),
      StandardCharsets.UTF_8)) {
    writer.write(Integer.toString(x));
  } catch (IOException e) {
    throw new RuntimeException("Something erred", e);
  }
}

必须将int/Integer/char转换为字符串,才能不被解释为字节码


因此,以
bos.write(String.valueOf(x.getBytes())结尾

你能把x变成一个字符串吗?不工作。为了澄清我的问题,输出是ascii格式的,我希望它是原始格式。你确定吗?如果您使用诸如
bos.write(Integer.toString(x).getBytes()之类的指令
文件中应该有100个它是原始格式的,但无论您使用什么方法将其作为文本文件读取,都必须在某种程度上将其表示为文本,默认情况下会选择ASCII。实际上,您的文件是一个二进制文件,包含字节
1100100
。这是因为您并没有将100放入文件,而是将其字符串放入文件。若要在文本文件中显示字符串表示,则不能将其作为字节流读取。你必须把它当作一个字符串来读。如果你是正确的,它是在超类中实现的。这就是答案。作者试图将一个整数写成一个字符串-使用字符串文字绕过部分问题。此外,在大多数情况下,不应该对字符串调用getBytes()——这将返回VM默认编码中字符串的字节表示形式。最好指定编码以避免令人不快的意外。@JamesFry你是对的,我已更改为指定编码。好东西-最好使用StandardCharset常量,而不是字符串文字。
public static void main(String[] args) {
  String path = "...";

  int x = 100;

  try (Writer writer = new OutputStreamWriter(new FileOutputStream(path),
      StandardCharsets.UTF_8)) {
    writer.write(Integer.toString(x));
  } catch (IOException e) {
    throw new RuntimeException("Something erred", e);
  }
}