大可制作:QQ群:31564239(asp|jsp|php|mysql)

Java Gossip: PrintStream

之前所介绍过的Stream输出对象,都是直接将内存中的数据写出至目的地(例如一个文件),举个例子来说,如果您将 int 整数 1 使用之前介绍的Stream对象输出至文件,则文件中所储存的是 int 整数 1 在内存中的值,例如:
  • FileStream.java
package onlyfun.caterpillar;

import java.io.*;

public class FileStreamDemo {
public static void main(String[] args)
throws IOException {
FileOutputStream file =
new FileOutputStream(
new File("test.txt"));
file.write(1);
file.close();
}
}

由于您使用write()方法,这会将 1 在内存中的值之低位元组0000001写入文件中,所以如果您使用文字编辑软体(像vi或UltraEdit)观看test.txt的16进位表示,其结果会显示 01(16进位表示)。

有时候您所想要储存的结果是转换为字节之后的结果,例如若程序的执行结果是3.14159,您会希望使用字节来储存3.14159,也就是俗称的储存为纯文字文件,如此当您使用简单的纯文字编辑器观看时,就可以直接看到程序执行的结果。

例如您若想使用纯文字文件看到test.txt的显示结果是1,则必须先将内存中的整数1,也就是二进位00000000 00000000 00000000 00000001转换为对应的字节编码,也就是0x31(十进位表示49)并加以储存。

使用PrintStream可以自动为您进行字节转换的动作,它会使用作业系统的默认编码来处理对应的字节转换动作,直接使用下面这个例子来作示范:

  • PrintStreamDemo.java
package onlyfun.caterpillar;

import java.io.*;

public class PrintStreamDemo {
public static void main(String[] args)
throws FileNotFoundException {
PrintStream printStream = new PrintStream(
new FileOutputStream(
new File("pi.txt")));

printStream.print("PI = ");
printStream.println(Math.PI);

printStream.close();
}
}

执行程序之后使用纯文字编辑器开启pi.txt,其内容会是PI = 3.141592653589793,print()或println()接受int、char、String、double等等数据类型, println()会在输出之后加上换行字节,而print()则不会。

注意在文件储存上实际并没有二进位文件或是纯文字文件的分别,所有的文件所储存的都是二进位的数据,您俗称的纯文字文件,其实正确的说,是指储存的结果是经过字节转换,例如将 int 整数 1转换为字节 '1' 的编码结果并加以储存。