Java基础之IO流
Java IO流使用装饰器设计模式,因此如果不能理清其中的关系的话很容易把各种流搞混,此文将简单的几个流进行梳理,后序遇见新的流会继续更新(本文下方还附有xmind文件链接)
抽象基类
字节流:InputStream,OutputStream.
输出流方法:close(), flush(), write(int b), write(byte[] b), write(byte[] b, int off, int len)
输入流方法:close(), abstract int read(), int read(byte[] b)
子类(非装饰流):文件流:FileOutputStream,FileInputStream.
构造方法:FileOutputStream(File file),FileOutputStream(String filename)
构造方法可以添加第二个布尔参数设置是否为追加模式子类(装饰流):序列化流:ObjectOutputStream,ObjectInputStream
构造方法:ObjectOutputStream(OutputStream out), ObjectInputStream(InputStream in)
输入流序列化方法:writeObject (Object obj)
输出流反序列化方法:readObject ()
子类(装饰流):过滤字节流:FilterInputStream,FilterOutputStream
子类(装饰流):字节缓冲流:BufferedInputStream,BufferedOutputStream
构造方法:BufferedInputStream(InputStream in), BufferedOutputStream(OutputStream out)
子类(装饰流):打印流PrintStream
构造方法:PrintStream(String fileName)
方法:print(),printf(),println()
...
System.setOut(PrintStream out)
子类(装饰流):字节数据流:DataOutputStream,DataInputStream
构造方法:DataOutputStream(OutputStream out),DataInputStream(InputStream in)
方法:write...
抽象基类
字符流:Reader,Writer
输入流方法:close(), int read(), int read(char[] cbuf)
输出流方法:close(), flush(),write(int c) write(char[] cbuf), write(char[] cbuf, int off, int len) write(String str)
子类(装饰流):字符缓冲流:BufferedReader,BufferedWriter
构造方法:BufferedReader(Reader in), BufferedWriter(Writer out)
特有方法:String readLine(), newLine()
,子类(装饰流2):转换流:InputStreamReader,OutputStreamWriter
构造方法:InputStreamReader(InputStream in),InputStreamReader(InputStream in, String charsetName)
子类(非装饰流):字符文件流:FileReader,FileWriter
构造方法:FileWriter(File file),FileWriter(String filename)
Java IO流采用装饰器设计模式,当包装流关闭时,其内部的被包装流也会关闭
字符流才有write(string)方法,字节流只能写入byte和int
xmind文件: 提取码:n414
- readObject读取到末尾时再读取会抛出EOFException
解决方法:
1.记录写入的数量
2.使用容器,例如ArrayList
3.捕获EOFException