Io流总结

Posted 臭屁猪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Io流总结相关的知识,希望对你有一定的参考价值。

io流用于输入和输出,就是将数据从程序输出到本地硬盘,从本地硬盘读取数据到程序。废话不多说,直接上关系图

一 字节流的输入 使用 FileInputSteam 

public static void main(String[] args) throws IOException {
		//创建一个文件源,将此文件中的数据读取出来并打印
		File file=new File("e:/src/ByteOut.txt");
		//new一个 FileInputStream类,参数为file,表示读取此文件中的 数据
		InputStream in=new FileInputStream(file);
		//创建长度
		int len=0;
		//创建中间容器
		byte[] by=new byte[1024];
		//下面调用read()方法开始读取数据,如果已经读完数据,没有数据可读取了,会返回-1
		//也就是len=-1那么跳出循环
		while(-1!=(len=in.read(by)))
		{
			System.out.println(new String(by));		
		}
		//关闭连接
		in.close();
		
	}

字节流的输出  使用FileOutputStream

public static void main(String[] args) throws IOException {				
				//创建一个文件源,将数据写入到这个文件中
				File file=new File("e:/src/ByteOut.txt");
				//new一个 FileInputStream类,参数为file,true表示追加
				OutputStream out=new FileOutputStream(file,true);
				String str="this is test";
				//将str转为字节数组
				byte[] b=str.getBytes();
				//调用write方法将数据输出.
				out.write(b);				
				//关闭连接
				out.close();
				
			}

二 字符流的输入 (字符流只能处理纯文本,而字节流可以处理一切数据) 

使用FileReader

public static void main(String[] args) throws IOException {
		//创建一个文件源,将数据写入到这个文件中
		File file=new File("e:/src/ByteOut.txt");
		//new一个 FileInputStream类,参数为file,
		Reader in=new FileReader(file);
		//创建长度
		int len=0;
		//创建中间容器 因为是字符,所有简历一个char类型的数组用作中间容器
		char[] by=new char[1024];
		//下面调用read()方法将数据读入by数组 ,如果已经读完数据,没有数据可读取了,会返回-1
		//也就是len=-1那么跳出循环
		while(-1!=(len=in.read(by)))
		{
			System.out.println(new String(by));		
		}
		//关闭连接
		in.close();
		
	}

字符流的输出

public static void main(String[] args) throws IOException {				
				//创建一个文件源,将数据写入到这个文件中
				File file=new File("e:/src/ByteOut.txt");
				//new一个 FileInputStream类,参数为file,true表示追加
				Writer out=new FileWriter(file,true);
				String str="this is test";						
				//调用write方法将数据写入.
				out.write(str);				
				//关闭连接
				out.close();				
			}

三 BufferedInputStream 和 BufferedOutputStream类 是字符缓冲流,为了提高性能和效率,

1.  java.io.BufferedInputStream与java.io.BufferedOutputStream可以为InputStream,OutputStream类增加缓冲区功能。构建BufferedInputStream实例时,需要给定一个InputStream类型的实例,实现BufferedInputStream时,实际上最后是实现InputStream实例。同样,构建BufferedOutputStream时,也需要给定一个OutputStream实例,实现BufferedOutputStream时,实际上最后是实现OutputStream实例。

2. BufferedInputStream的数据成员buf是一个位数组,默认为2048字节。当读取数据来源时,例如文件,BufferedInputStream会尽量将buf填满。当使用read()方法时,实际上是先读取buf中的数据,而不是直接对数据来源作读取。当buf中的数据不足时,BufferedInputStream才会再实现给定的InputStream对象的read()方法,从指定的装置中提取数据。

3. BufferedOutputStream的数据成员buf也是一个位数组,默认为512字节。当使用write()方法写入数据时实际上会先将数据写到buf中,当buf已满时才会实现给定的OutputStream对象的write()方法,将buf数据写到目的地,而不是每次都对目的地作写入的动作。

写法如下 用法和之前的字节流和字符流的输入输出一样.

BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(new File("e:/src/a.txt")));

BufferedInputStream  bis=new BufferedInputStream(new FileInputStream(new File("e:/src/a.txt")));

四 字节流转化为字符流  使用的类 BufferedReader和InputStreamReader这两个都可以 不过是有区别滴,就是InputStreamReader类是将字节流转为了字符数组

BufferedReader 的readLine()方法可以将字节流转为字符串 而InputStreamReader只有read()方法 返回的是char[];

public static void main(String[] args) throws IOException {	
				//创建文件
				File file=new File("e:/src/ByteOut.txt");
				//new一个BufferedReader类 类中包含 InputStreamReader的实例  可以指定编码
				BufferedReader br=new BufferedReader
						(new InputStreamReader(new FileInputStream(file), "UTF-8"));
				String str=br.readLine();
				System.out.println(str);
				br.close();
			}

 InputStreamReader用法

public static void main(String[] args) throws IOException {	
				//创建文件
				File file=new File("e:/src/ByteOut.txt");
				//new一个InputStreamReader类  可以指定编码
				InputStreamReader isr=new InputStreamReader(new FileInputStream(file),"UTF-8");
				//创建中间容器
				char[] c=new char[1024];
				while(-1!=(isr.read(c)))
				{
					System.out.println(new String(c));
				}
				isr.close();
			}

五 字节数组流 ByteArrayInputStream ByteArrayOutputStream

ByteArrayOutputStream类是在创建它的实例时,程序内部创建一个byte型别数组的缓冲区,然后利用ByteArrayOutputStream和ByteArrayInputStream的实例向数组中写入或读出byte型数据。在网络传输中我们往往要传输很多变量,我们可以利用ByteArrayOutputStream把所有的变量收集到一起,然后一次性把数据发送出去。具体用法如下:

ByteArrayOutputStream:    可以捕获内存缓冲区的数据,转换成字节数组 ,ByteArrayInputStream: 可以将字节数组转化为输入流

public class OutIn {
			public static void main(String[] args) throws IOException {				
			
				outbyte("E:/src/mhy.txt",inbyte("E:/src/my.txt"));
			}
			//测试ByteArrayInputStream 并输出到E:/src/mhy.txt
			public static void outbyte(String src,byte[] b) throws IOException{
				File file=new File(src);
				byte[] best=new byte[1024];		
				OutputStream out=new BufferedOutputStream(new FileOutputStream(file));
				//new 一个 BufferedInputStream  这个可以使用多态  
				InputStream in=new BufferedInputStream(new ByteArrayInputStream(b));			
				int len=0;
				//将数据读取到 best 然后输出
				while(-1!=(len=in.read(best)))
				{				
					out.write(best);
					System.out.println(new String(best));
				}				
				out.flush();
				in.close();
				out.close();						
			}
		//测试ByteArrayOutputStream并返回一个  byte[]数组
		public static byte[] inbyte(String src) throws IOException{
			File file=new File(src);
			byte[] best=new byte[1024];
			InputStream inp=new BufferedInputStream(new FileInputStream(file));
			//new 一个 ByteArrayOutputStream  这个不可使用多态
			ByteArrayOutputStream out=new ByteArrayOutputStream();
			int len=0;
			while(-1!=(len=inp.read(best)))
			{
				//将字节数组写入到 out
				out.write(best, 0, len);
			}
			//将out中的有效信息赋值给best
			best=out.toByteArray();
			out.flush();
			inp.close();
			out.close();		
			return best;
		}
}

总结: 

 

   

 

以上是关于Io流总结的主要内容,如果未能解决你的问题,请参考以下文章

Java IO流基础总结

Java基础总结IO流

Java之IO流总结

IO流总结

021.9 IO流 流总结

IO流简要总结