我目前正在学习java的基本I/O。请看下面的代码:java.io.DataOutputStream类中的writeChar方法和writeShort方法之间有什么区别?
import java.io.DataOutputStream;
import java.io.IOException;
public class TestIO {
public static void main(String[] args) {
try(DataOutputStream out=new
DataOutputStream(new FileOutputStream("e:\\ccc.txt"))){
out.writeShort(67);
out.writeChar(67);
}catch(IOException ex){
ex.printStackTrace();
}
}
}
在输出ccc.txt文件,我得到下面的输出:
C C
据我所知,这两种方法写的两个字节的OutputStream和二进制串67是1000011,它代表ASCII或其他代码中的大写字母C. C之前的空格是由方法读取的字节0000 0000。
但是,如果两个方法都只是将两个字节写入输出流,那么它们之间的区别是什么?我期待writeShort可以将两个字节写入输出流,然后将其传回整数。换句话说,我如何直接将整数67写入文件,而不是将其转换为字符?
让我以不同的方式提出这个问题,在什么情况下这两种方法会产生不同的结果?我需要一个真实世界的例子。谢谢!
请注意,有一些编码,其中67 *不是* C的编码形式。但在Java中,''C''将总是*的值为67,因为它总是UTF-16。 –
@Ingo,其实writeShort(33333)没有给出编译时错误?对此有何想法? –
@ user3225698这可能是因为参数声明为int。如果writeChar的参数也被声明为int,那么你将无法产生不同的结果。如果是char,则尝试writeChar(77777)。 – Ingo