JAVA基础21-IO流

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a592381841/article/details/84800064

1.流分类

不同角度对流进行分类:
1.根据数据单位不同,字符流,字节流
2.数据流方向可分为,输入流,输出流
3.功能不同,可分为:节点流,处理流。

在这里插入图片描述

2.流的体系

Java中所有的流类位于java.io包,分别继承以下四种抽象流类型

类型 字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer

在这里插入图片描述
在这里插入图片描述

3.常见的流介绍

3-1 常见节点流

 1.对文件操作的字符流有FileReader/FileWriter
 2.对文件操作的字节流有 FileInputStream/FileOutputStram

3-2.常见处理流

3-2-1.缓冲流
概念:缓冲流要套接在相应的节点流上,为读写提供了缓冲功能
分类:
	A:字节缓冲流 BufferedInputStream/BufferedOutputStream
	B:字符缓冲流	BufferReader/BufferWriter
注意: 
	A:字符缓冲流分别提供了读取和写入一行的方法ReadLine和NewLine方法 
	B:对于输出缓冲流,写出的数据,会先写入到内存中,再使用flush方法将内存中的数据刷到硬盘。所以,在使用字符缓冲流的时候,一定要先flush,然后再close,避免数据丢失。

3-2-2转换流 用于字节数据到字符数据之间的转换

1. InputStreamReader(要InputStream套接):字节到字符的桥梁
2. OutputStreamWriter:字符到字节的桥梁
	A:字符流InputStreamReader字节流通向字符流的桥梁
	B:OutPutStreamWriter(要OutPutStream套接)字符流通向字节流的桥梁

3-2-3数据流

	  提供读写java中基本数据类型的功能  DataInputStream/DataOutputStream

3-2-4对象流

		用于直接将对象写入写出
				ObjectInputStream /ObjectOutputStream
					作用的对象必须实现Serializable接口

4.字节流和字符流的转换

4-1.字节流转字符流

概念:
字节流(InputStream,OutPutStream)-》字符流(Reader,Writer)
实现方式:
利用这两个类可以实现 InputStreamReader,OutputStreamWriter

package com.demo9aa.demo6;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Demo1 {
	
	public static void main(String[] args) throws IOException {
		
		//字节流转换为字符流【输入流】
		//模拟出字节流
		FileInputStream f=new FileInputStream("E:\\1.txt");
		//字节流转换为字符流
		InputStreamReader re=new InputStreamReader(f,"GBK");
		BufferedReader reb=new BufferedReader(re);
		//验证是否成功
		StringBuffer b=new StringBuffer();
		String s=null;
		while((s=reb.readLine())!=null){
			b.append("\n"+s);
		}
		System.out.println(b.toString());
		reb.close();
		re.close();
		f.close();
		
		//字节流转换为字符流【输出流】
		OutputStreamWriter w=new OutputStreamWriter(new FileOutputStream("E:\\1.txt"), "GBK");
		BufferedWriter ww=new BufferedWriter(w);
		ww.write("中国梦");
		ww.flush();
		ww.close();
		
	}
}
4-2.字符流转换为字节流

概念:
字符流(Reader,Writer) -》字节流(InputStream,OutPutStream)
实现方式:
(1)利用字符流得到char[]数据
(2)char[]转换为String;
(3)String的getByte()转换为byte[]数据
(4)通过 ByteArrayInputStream和ByteArrayOutputStream 即可获得字节流

package com.demo9aa.demo6;

import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;

public class Demo2 {
	public static void main(String[] args) throws IOException {
		//字符流转字节流[输入]
		//模拟出字符流
		FileReader rr=new FileReader("E:\\1.txt");
		//转换过程
		char[] c= new char[1024];
		StringBuffer s=new StringBuffer();
		while(rr.read(c, 0, c.length)!=-1){
			s.append(String.valueOf(c));
		}
		ByteArrayInputStream in=new ByteArrayInputStream(s.toString().getBytes("GBK"));
		//验证转换成功否
		FileOutputStream f=new FileOutputStream("E:\\2.txt");
		f.write(s.toString().getBytes("GBK"));
	}

}

猜你喜欢

转载自blog.csdn.net/a592381841/article/details/84800064