Java学习笔记(二)
张文泰
posted @ 2010年3月11日 23:44
in Code and Develop
with tags
java
, 2939 阅读
Java的输入输出也是基于“流”的概念,和C++采用的概念很相似。流分为输入流(Input Stream)和输出流(Output Stream)两种。
java.io包为我们提供了多种数据流,大致分为字节流和字符流两种。它们的区别在于字节流是以8字节为单位处理文件,而字符流是以16字节为单位。这区别其实就是以byte为单位还是以Unicode码字符为单位,又由于Java本身更倾向于Unicode,所以字符流兼容性会好一点。
下文中的所有类、方法和接口都可以在java.sun.com上找到相关的文档。
字节流主要是从InputStream和OutputStream中派生出的,大致有:
- FileInputStream、FileOutputStream
- PipedInputStream、PipedOutputStream
- ByteArrayInputStream、ByteArrayOutputStream
- FilterInputStream、FilterOutputStream
- DataInputStream、DataOutputStream
- BufferedInputStream、BufferedOutputStream
字节流提供了DataInputStream和DataOutputStream作为数据流的类,可以较方便地读取数据。
而字符流是从Reader和Writer中派生出的,有:
- InputStreamReader、OutputStreamWriter
- FileReader、FileWriter
- CharArrayReader、CharArrayWriter
- PipedReader、PipedWriter
- FilterReader、FilterWriter
- BufferedReader、BufferedWriter
- StringReader、StringWriter
字符流提供的接口和字节流类似,但是把其中的参数换成了字符或者字符数组。
我们可以使用上面的类来建立比较方便的输入输出过程,比如:
BufferedReader buffReader = new BufferedReader(new FileReader(“XXX.xxx”)); BufferedWriter buffWriter = new BufferedWriter(new FileWriter(“XXX.xxx”));
另外Java还提供了Scanner这个封装得很好的类进行读入。经过我的测试BufferedReader、BufferedWriter类的速度并不比C++的速度慢很多,而Scanner相对很慢,但是比较方便。另外,BufferedWriter还可以再放入PrintWriter中(这也是一个字符流的类,对应的字节流类是PrintStream):
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("XXX.xxx")));
而PrintWriter封装得也很好,和System.out的使用差不多。
本作品遵循“署名-非商业性使用-相同方式共享 3.0 Unported”协议,转载请注明来自richard-desktop。