java io纵览

java io纵览

Posted by julyerr on February 1, 2018

java io中涉及的类比较多,我们不可能也不需要深入了解每一个类的作用和使用。 本文针对比较常用的类使用进行说明,以后遇到其他的类只需要查api即可。

从图中看到其他的类基本都是从字节流和字符流派生出的子类

字节流

  • InputStream(抽象类,输入流)
    常见方法
      int available()
      void close()
      int read()
      int read(byte[] b)
    
  • OutputStream(抽象类,输出流)
    常见方法
      void close()
      void flush()
      void write(byte[] b)	
      void write(int b)
    
  • 常见子类及其方法
    输入流和输出流绝大部分方法都是对应的,因此只以InputStream为例,不同之处也会针对性指明
      FileInputStream  从本地文件读取数据
          FileInputStream(File file)
    	    
      ByteArrayInputStream Byte数组读取数据
    
      StringBufferInputStream StringBuffer读取数据,输入流特有
    	
      PipedInputStream 管道中读取数据,通常用于不同线程之间通信
    	
      SequenceInputStream 将多个流合并返回,输入流特有
          SequenceInputStream(InputStream s1,InputStream s2)
    

    ObjectInputStreamFileterInputStream的子类都是装饰流,可参看

	数据操作流 为方便对intchar等基础类型的操作而封装
		DataInputStream(InputStream in)
    		int readInt()
    		char readChar()
    		
	回退流 能够把部分读取到的数据回退回去,输出流特有
		void unread(int b)
		void unread(byte[] b) 回退一个数组的数据到回退流中
		
	缓存流 磁盘操作效率比较低,内存缓存效率较高
		BufferInputStream(InputStream in)	
		
	打印流	
		PrintStream(File file)				
		PrintStream(OutputStream out)
		void println()

字符流

  • Reader(输入流,抽象类)
    常见方法
      void close()
      int read()
      int read(char[] cbuf)
    
  • Writer(输出流,抽象类)
    常见方法
      void close()
      void flush()
      void write(String str)
      void write(char[] cbuf)
    
  • 常见子类及其方法
    和InputStream类似,输入字符流和输出字符流绝大部分是对应的,以输入字符流为例
      BufferReader 对输入的字符流进行缓存
      CharArrayReader 从字符数组读取流
    

字节流和字符流的比较和转换

  • 比较
    除了基本的操作方法不同之外,字符流提供了缓存而字节流没有提供缓存
  • 转换
      InputStreamReader : 字节到字符转换的桥梁
          FileReader 子类
      OutputStreamWriter 字符到字节转换的桥梁
          FileWriter 子类
      eg:
          使用InputStreamReaderSystem.in转变为字符流
          Buffered buf = new BufferedReader(new InputStreamReader(System.in))	
    

其他和流操作相关的类或接口

  • Scanner
    类似c语言中的scanf,可以实现格式化的输入
    常用方法
      Scanner(InputStream source)
      Scanner(File source)
          boolean hasNextInt()
          boolean hasNext(pattern)
          String next()
    
  • File 类
    常见方法
      File(String pathname)
      	boolean createNewFile() throws IOException
      	boolean delete() 
      	boolean exits()
      	boolean isDirectory()
      	long length()
      	String[] list() 如果是目录,返回的目录下的文件名
      	File[] listFiles() 如果是目录,返回的目录下的文件对象
      	boolean mkdir()
      	boolean renameTo(File dst)
    
  • RandomAccessFile 类
    常见方法
      RandomAccessFile(File file,String mode)
      	void close()
      	int readInt(byte[] b)
      	void writeInt(int v)
      	byte readByte()
      	int read(byte[] b)
      	void writeBytes(String s)
      	int skipByets(int n)
      	void seek(long pos)	能够移动文件起始的读取位置
    

参考资料