【发布时间】:2014-02-13 14:57:56
【问题描述】:
我目前正在学习java的基本I/O。请看以下代码:
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
我知道这两种方法都将两个字节写入输出流,而 67 的二进制字符串是 1000011,它表示 ASCII 或任何其他代码中的大写字母 C。 C 前面的空格是方法读取的字节 0000 0000。
但是,如果这两种方法都只是将两个字节写入输出流,那么这两种方法有什么区别?我期待 writeShort 可以将两个字节写入输出流,然后将其传输回整数。换句话说,如何直接将整数 67 写入文件,而不是将其转换为字符?
让我换个方式问这个问题,这两种方法在什么情况下会产生不同的结果?我需要一个真实的例子。谢谢!
【问题讨论】:
-
请注意,有些编码不是
C的编码形式。但在 Java 中,'C'的值将始终为 67,因为它始终是 UTF-16。 -
@Ingo,实际上 writeShort(33333) 没有给出编译时错误?对此有什么想法吗?
-
@user3225698 这可能是因为参数被声明为 int。如果 writeChar 的参数也声明为 int,那么您将无法产生不同的结果。如果是char,那么试试writeChar(77777)。
-
@user3225698 实际上是int,但可以这样想:如果Java被更改为char使用3个字节,那么它会有所作为。不需要往后想:我想写 2 个字节,使用哪种方法?(在这种情况下使用 writeByte 两次)但是:我需要写一个 X,所以我使用writeX 方法。
标签: java io outputstream