Java学习笔记(二)

张文泰 posted @ 2010年3月11日 23:44 in Code and Develop with tags java , 2166 阅读

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
Creative Commons License

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter