Java 将ByteArrayOutputStream的输出显示为整数
文件fos1.txt中的结果输出是d,但我希望文件中的ti是100,我如何才能做到这一点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
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);
}
}