欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

IO流常用类的总结

程序员文章站 2024-03-04 21:14:24
...

主要对常用的相关IO进行总结,如果哪里不懂仔细查看API。

可以从三个方面去看待IO流。

                                               第一个从处理数据的类型去看可分为:字节流,字符流,转换流。

                                               第二是从流向去看分为:输出和输入流

                                               第三个是从是不是操作的节点分为:节点流和处理流(装饰流)

我们主要从第三个方面去分析。所谓的节点流就是:直接可以从或向一个特定的地方(如磁盘、内存、设备等)读写数据。处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。为了方便和提高性能。可以理解给节点流穿衣服。

坐稳开车!

我大概画了一个思维导图,粉红色的是常用的节点流,黄色的是常用的处理流。接下来我们将一一分析如下的流。

                                 IO流常用类的总结

一、节点流。

     1.InputStream

     读取字节流

                                                     IO流常用类的总结

     构造方法:InputStream()

     主要方法:int read()  从输入流中读取数据的下一个字节。返回 0255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1

     2.OutputStream

     写出字节流

                                                    IO流常用类的总结

     构造方法:OutputStream()

     主要方法:

     void write(int b) 将指定的字节写入此输出流

     void write(byte[] b)  将 b.length 个字节从指定的 byte 数组写入此输出流。

     void write(byte[] b,int off,int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。

     void close()    关闭此流并释放与此流相关的系统资源。注意的是不是代码直接去和操作系统打交道,而是有java虚拟机通知操作系统去关闭。

     void flush()  刷新此输出流并强制写出所有缓冲的输出字节。

     3.FileInputStream

                                                    IO流常用类的总结

     构造方法:

   IO流常用类的总结

     主要方法:

     int read()  从此流中读取一个数据字节。

     int read(byte[] b)  从此流中将b.length个字节的数据读入到一个byte数组中

     int read(byte[] b,int off,int len) 从off开始将len个字节读入到byte数组中

     void close()

    4.FileOutputStream

                                                      IO流常用类的总结             

IO流常用类的总结

     void write(int b)                void write(byte[] b)             void write(byte[] b,int off,int len)         void close()         void flush()  

     5.ByteArrayInputStream

                                                      IO流常用类的总结

IO流常用类的总结

     ByteArrayInputStream内部包含了以缓冲红区,该缓冲区包含从流中读取字节。内部计数器跟踪下一个字节。

     注意:  ByteArrayInputStream不用像FileInputStream一样通过操作系统去读取,而是同在内存中的,他直接是由垃圾回收机制管控的,所以不用释放。这个内存可以是电脑上的,也可以是服务器上的。

     主要方法:继承InputStream

     6.ByteArrayOutStream

                                                 IO流常用类的总结IO流常用类的总结      

IO流常用类的总结

     主要方法:继承OutputStream

     byte[] toString()获取流内容。默认使用平台使用的字符集,将字节解码为字符串

     byte[] toByteArray()获取到字节内容

     注意: 1.ByteArrayInputStream不用像FileInputStream一样通过操作系统去读取,而是同在内存中的,他直接是由垃圾回收机制管控的,所以不用释放。这个内存可以是电脑上的,也可以是服务器上的。

     2.构造方法里面不用自己创建源

     3.要获取流中的内容通过tobyteArray()和toString()去获取。

     7.Reader

     用于读取字符流的抽象类。

                         .IO流常用类的总结

                                  IO流常用类的总结

    主要方法:和InputStream差不多。

     8.Writer

     写入字符流的抽象类。

                            IO流常用类的总结

     主要方法:和OutputStream类似

     9.FileReader

      用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。

                                              IO流常用类的总结

 

           IO流常用类的总结

                                         IO流常用类的总结

    10.FileWriter

    用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。

                                                                            IO流常用类的总结

                                      IO流常用类的总结

 

写一个例子来看看如何使用字节流,其他的思想类似。

package cn.liu.io2;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
/**
 * 1、创建源(nnn.txt相对路径是在study02下)
 * 2、选择流
 * 3、操作
 * 4、释放 
 * @author Administrator
 *
 */

public class IOTset02 {
	public static void main(String[] args) {
		//1、创建源
		File src = new File("nnn.txt");
	
		//2、选择流
		InputStream is =null;
        try
        {
			is = new FileInputStream(src);
			
			//3、操作(读取)
			int len;
			while((len = is.read())!=-1) {
				System.out.println((char)len);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			//4、释放资源
			try {
				if(is!=null) {
					is.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	

}

   

二、处理流(装饰流)

装饰流也都大同小异。

以BufferedInputStream和BufferedOutputStream为例

字节缓冲流就是利用装饰器来对节点流进行装饰。在内部提供一个缓冲区。对字节流的缓冲,提高操作的性能。缓冲区默认 8k。

                 IO流常用类的总结IO流常用类的总结

                IO流常用类的总结

               IO流常用类的总结

装饰流必须借助节点流去实现,装饰流只是为了便利或提高性能。就相当于给节点流穿上了一件衣服。

package cn.liu.io3;

import java.io.BufferedInputStream;

/**
 * 用装饰器装饰过的字节缓冲流
 * @author Administrator
 *
 */

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;


public class BufferTest {	
	public static void main(String[] args) {
		//1.创建流
		 File src = new File("nnn.txt");
		 
		 //InputStream is = null;
		 BufferedInputStream is = null;
		 try {
			//2、选择流
			//is = new FileInputStream(src);
			//a = new BufferedInputStream(is);
			is = new BufferedInputStream(new FileInputStream(src));
			
			//操作(分段读取)
			byte[] flush = new byte[1024*1];//缓冲字符数组 1k
			int len = -1;//接受长度
			
			while((len=is.read(flush))!=-1) {//len是得到了字节长度
				//解码:
				String aa = new String(flush,0,len);
				System.out.println(aa);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			//释放资源
			try {
				if(is!=null) {
					is.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		 
	}
}

IO流只要将节点流的原理搞清楚,装饰流也会很快掌握。

IO流一切都是输入和输出。灵活应用。