0

直接来自这个 Java API

公共无效写入(int b)

将指定的字节写入此流。如果字节是换行符并且启用了自动刷新,则将调用刷新方法。

请注意,字节是按给定的方式写入的;要编写将根据平台的默认字符编码进行翻译的字符,请使用 print(char) 或 println(char) 方法。

我看到它是指定的the byte is written as given; 但是如果我尝试write(65)得到A我所期望的。

我应该写什么write()才能与它不匹配print()?你能举个例子吗?

4

3 回答 3

0

二进制01000001(the byte) 是 ASCII 字符A,因此当您读取为String.

你需要使用FilterOutputStream.html#write(byte[])

write("65".getBytes());

获得相同的输出。

或者你需要的任何类型

write(new Integer(65).toString().getBytes());

为了与 print() 不匹配,我应该在 write() 中写什么?你能举个例子吗?

System.out.println(65); // writes 65 as a String, String.valueOf(65).getBytes()
System.out.write(65); // writes 65 as a byte
System.out.flush();

印刷

65 // the String value '65'
A // the character value of binary 65

阅读方法的javadocprint上面的接受一个int

打印一个整数。String.valueOf(int)生成的字符串按照平台默认的字符编码转换为字节,这些字节的写入方式与 write(int) 方法完全相同。

在任何一种情况下,字节都会写入流,但它们的显示方式取决于您读取它们的方式。String具有接受charsetNameCharset对象的构造函数。A Charset(作为一个概念和一个类)是

十六位 Unicode 代码单元序列和字节序列之间的命名映射。

于 2013-09-05T15:10:22.930 回答
0

给定

String s = "some string";
byte[] sData = s.getBytes();

write(sData, 0, sData.length);print(s);

应该是等价的。

于 2013-09-05T15:15:47.040 回答
0

如果你试试

writer.print('Ä');

根据您的平台,您可能会得到不同的结果。对于使用 Latin-1 作为默认编码的平台,它可能是一个字节,对于使用 UTF-8 的平台,它可能是 2 个字节。

于 2013-09-05T18:47:05.030 回答