流(二)

来源:互联网 发布:网络暴力后果 编辑:程序博客网 时间:2024/05/18 01:52
  • 文本的输入与输出
    在保存数据时,可以选择二进制格式或文本格式。例如,整数1234存储成二进制时,被写为由字节00 00 04 D2 构成的序列(十六进制的表示法),而存储成文本格式时,它被存成了字符串“1234”。尽管二进制格式的I/O高速且高效,但不宜人阅读。
    在存储文本字符串时,需要考虑字符编码方式。在UTF-16编码方式中,字符串“1234”编码为00 31 00 32 00 33 00 34。但是,许多程序都希望文本文件按照其他的编码方式编码。在ISO 8859-1这种在美国和西欧最常用的编码方式中,这个字符串将写出31 32 33 34,其中抹去了0字节。
    OutputStreamWriter类将使用选定的字符编码方式,把Unicode字符流转换成字节流(其实,字符流的底层就是字节流,两者的区别在于各自的最小单位一个是字符(多个字节),一个是字节)。而InputStreamReader类将包含字节的输入流转换成可以产生Unicode码元的读入器。
    你可以通过在InputStreamReader的构造器中进行指定的方式来选择不同的编码方式。例如,
InputStreamReader in = new InputStreamReader(System.in, "ISO8859-5");

对于文本输出,可以使用PrintWriter。这个类拥有以文本格式打印字符串和数字的方法,他甚至还有一个将PrintWriter链接到FileWriter的便捷方法,下面的语句:

PrintWriter out = new PrintWriter("employee.txt");

等同于

PrintWriter out = new PrintWriter(new FileWriter("emploee.txt"));
String name = "Harry Hacker";double salary  = 75000;out.print(name);out.print(' ');out.println(salary);

输出到写出器out,之后这些字符将会被转换成字节并最终写入“employee.txt”中。
println方法在行中添加对目标系统来说恰当的结束符(Windows系统是”\r\n”,UNIX系统是“\n”),也就是通过调用System.getProperty(“line.seperator”)而获得的字符串。
如果写出器设置为自动冲刷模式,那么只要println被调用,缓冲区的所有字符都会被发送到他们的目的地(打印写出器总是带有缓冲区的)。默认情况下,自动刷新机制是禁用的,可以通过使用PrintWriter(Writer out,Boolean autoFlush)来启用或禁用自动刷新机制。


以二进制格式写出数据,需要使用DataOutputStream。
以文本格式写出数据,需要使用PrintWriter。

读入文本输入:

BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("emplyee.txt"), "utf-8"));String line;while((line = in.readLine()) != null) {}

然而,BufferedReader没有任何用于读入数字的方法,建议使用Scanner来读入文本输入。


0 0