字节流和字符流
顾名思义,字节流就是操作的是字节,字符流操作的就是字符。其中字节流又可以分为字节输入流(InputStream)和字节输出流(OutputStream)。同样的字符流也可以分为字符输入流(Reader)和字符输出流(Writer)。字节输入流的用法和字符输入流的用法类似,字节输出流的用法和字符输出流的用法非常类似,最明显的区别是字节流是对字节的操作,字符流是对字符的操作。
①InputStream和Reader
通过查看API文档可以发现InputStream和Reader的核心方法分别是:
InputStream:
常见子类: ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream,StringBufferInputStream
1 import java.io.*; 2 3 public class InputStreamTest { 4 public static void main(String[] args) throws IOException { 5 InputStream is = new FileInputStream("f:/InputStream.txt"); 6 7 byte[] b = new byte[32]; 8 int len = 0; 9 while ((len = is.read(b)) != -1) { 10 is.read(b, 0, len); 11 System.out.println(b); 12 } 13 14 } 15 }
Reader:
常见子类:BufferedReader
, LineNumberReader
, CharArrayReader
, InputStreamReader
, FileReader
, FilterReader
, PushbackReader
, PipedReader
, StringReader
, Writer
1 import java.io.*; 2 3 public class ReaderTest { 4 public static void main(String[] args) throws IOException { 5 Reader is = new FileReader("f:/InputStream.txt"); 6 7 char[] b = new char[32]; 8 int len = 0; 9 while ((len = is.read(b)) != -1) { 10 is.read(b, 0, len); 11 System.out.println(b); 12 } 13 14 } 15 }
如果运行上述两个例子的话会发现输出结果不一样,InputStream举例中输出的不是文件里面的内容,这是因为InputStream读取的是一个个二进制码
2.OutputStream和Writer
OutputStream和Writer的核心方法是“写”,就是将数据写入到输出流里面去。分别看下他们的API上面的方法:
OutputStream:
常见子类:ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, OutputStream, PipedOutputStream
Writer:
常见子类:BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, PipedWriter, PrintWriter, StringWriter
应为两者都是类似的,这里就举只一个Writer的例子
1 import java.io.*; 2 3 public class WriterTest { 4 public static void main(String[] args) throws IOException { 5 Writer wr = new FileWriter("f:/Writer.txt"); 6 7 String s = new String("我是一个大公鸡"); 8 wr.write("我 "); 9 wr.write(s, 0, s.length()); 10 wr.flush(); 11 wr.close(); 12 13 } 14 }
记得写完之后一定要刷新缓冲,并且关闭流。
我不知道这些有没有说清楚,如果没有说清楚或者错误的地方希望大家不要给我脸,尽情地指出来,不胜感激
下一篇会详细写一下,那个各种流中的常见子类。