直接来自这个Java API:
写
公共无效写入(int b)
将指定的字节写入此流。如果字节是换行符,并且 启用自动刷新,然后将调用刷新方法。
请注意,字节是按给定方式编写的;写入一个字符,该字符将 根据平台的默认字符编码进行翻译, 使用 print(char) 或 println(char) 方法。
我看到它已指定the byte is written as given;
但是,如果我尝试write(65)
,我会得到我期望的A
。
我应该在write()
写什么才能与print()
不匹配?你能举个例子吗?
给定
String s = "some string";
byte[] sData = s.getBytes();
write(sData, 0, sData.length);
和 print(s);
应该是等效的。
01000001
(byte
)是ASCII字符A
所以当你读String
时你会得到它。
您需要使用FilterOutputStream.html#write(byte[])
write("65".getBytes());
以获得相同的输出。
或者您需要的任何类型
write(new Integer(65).toString().getBytes());
我应该在 write() 中写什么才能与 print() 不匹配?你能举个例子吗?
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
阅读 javadoc 了解print
方法。上面的一个接受int
和
打印整数。由 String.valueOf(int) 生成的字符串是 根据平台的默认字符转换为字节 编码,并且这些字节完全按照 写(整数)方法。
在任一情况下,字节都会写入流,但它们的显示方式取决于您读取它们的方式。 String
具有接受charsetName
或Charset
对象的构造函数。Charset
(作为一个概念和一个类)是
十六位 Unicode 代码单元序列之间的命名映射 和字节序列。
如果你尝试
writer.print('Ä');
根据您的平台,您可能会获得不同的结果。对于使用 Latin-1 作为默认编码的平台,它可能是单个字节,对于使用 UTF-8 的平台,它可能是 2 个字节。