IO(3)

来源:互联网 发布:光束灯编程教学 编辑:程序博客网 时间:2024/06/11 07:52
Text Input and Output

从字节的形式过度到字符,那么就涉及到编码与解码的问题了。

1,当我们保存文本数据时可以采用两种方式,即文本方式和二进制形式,例如整数1234可以被保存成二进制格式,那么它将会以00 00 04 D2的形式保存,如果保存成文本格式,那么它会以"1234"保存,虽然二进制的形式来进行IO操作比较快,但是它不利于人类的读的方式。
当我们保存文本时,如果我们采用UTF-16的格式进行编码,那么字符串"1234"会被编码成00 31 00 32 00 33 00 34.

2,我们来看看OutputStreamWriter和InputStreamReader类
OutputStreamWriter类会会根据你指定的编码方式把Unicode字符转化成字节流的形式,而InputStreamReader则相反,它会把字节流的形式转化为Unicode字符形式。例如:
InputStreamReader in = new InputStreamReader(System.in);
它会把你从键盘上读入的字节编码成Unicode的形式。
InputStreamReader会默忍把字符编码成你本地系统的编码方式,当你不爽时,你完全可以按照你喜欢的形式进行编码。比如:
InputStreamReader in = new InputStreamReader(new FileInputStream("kremlin.dat","ISO8859_5");

3,上面的两个个类都是输入输出来进行读取字符流的的,那么还有如何直接向文本写入数据的,就可以使用FileWriter类,它的定义是FileWriter out = new FileWriter("output.txt"));
等价于FileWriter out = new FileWriter(new FileOutputStream("output.txt"));那么构造了一个FileWriter对象,如何向文本写入数据呢?
那么就需要借助PrintWriter类了,这个类下有一些打印不同数据类型的方向,比如:
String name = "Harry Hacker";
double salary = 75000;
out.print(name);
out.print(' ');
out.println(salary);
这个过程就是先建立一个与文件相连的中间类PrintWriter,按后通过FileWriter来进行向文本写入不同的数据类型。
The println method adds the correct end-of-line character for the target system ("\r\n" on Windows, "\n" on UNIX) to the line. This is the string obtained by the call System.getProperty("line.separator").
不同的系统之间的换行符不同,WINDOWS系统是'\r\n',UNIX系统是'\n';我们可以通过System.getProperty("line.separator");
FileWriter还有一种常用的构造方法:查看API:
public PrintWriter(OutputStream out,
                   boolean autoFlush)
通过现有的 OutputStream 创建新的 PrintWriter。此便捷构造方法创建必要的中间 OutputStreamWriter,后者使用默认字符编码将字符转换为字节。
参数:
  out - 输出流
  autoFlush - boolean 变量;如果为 true,则 println、printf 或 format 方法将刷新输出缓冲区
  具体的方向请查阅官方文档。
4,有了直接向文本写入数据,那么有什么办法是可以直接从文本读出数据呢?
我们知道有两种方式可以文本写入数据,第一种以二进制的形式把数据写入文本中,你可以使用DataOutputStream;
第二种方法直接以文本形式将数据写入到文本,你可以使用PrintWriter;
因此,你希望有一个模拟DataInputStream的形式让你去从文本中读出数据来,现在在Scanner类让你方便的读取数据出来,但是在javase5.0版本,我们可以使用BufferedReader带缓冲区的文本输出流来进行读取数据,你只要简单的调用它的readLine()方法就行了。
例:
String line;
while((line = in.readLine()) != null){
    do something with line
}
readLine

public String readLine()
                throws IOException
读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。
返回:
包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null

原创粉丝点击