IO流的基本操作(转换流和缓冲流)

IO流

一.转换流

转换流是为了解决编码问题.

1.OutputStreamWriter 字符输出转换流

在这里插入图片描述

构造方法

  1. OutputStreamWriter(OutputStream out) 创建使用默认字符编码的 OutputStreamWriter。
  2. OutputStreamWriter(OutputStream out, Charset cs) 创建使用给定字符集的 OutputStreamWriter。
  3. OutputStreamWriter(OutputStream out, CharsetEncoder enc) 创建使用给定字符集编码器的 OutputStreamWriter。
  4. OutputStreamWriter(OutputStream out, String charsetName) 创建使用指定字符集的 OutputStreamWriter。
  • 常用方法与Writer类类似.

基本步骤 :

  • 创建字节输出流
  • 创建转换流,将字节流包进去
  • 使用转换流进行输出
  • 关闭资源
//字符转字节  输出
	@Test
	void charobyte() {
		//目标文件
		File file = new File("out.txt");
		//创建字节输出流
		try {
			FileOutputStream fos=new FileOutputStream(file,true);//追加写出
			//创建转换流,将字节包进去
			//设置转换时使用的编码格式
			//OutputStreamWriter(   ,   )第一个参数为转换的字节输出流,第二个参数为转换后使用的编码
			OutputStreamWriter osw=new OutputStreamWriter(fos,"utf-8");
			//使用转换流进行输出
			osw.write("这是使用转换流进行输出的");
			//关闭资源
			osw.flush();
			osw.close();
			fos.close();
			System.out.println("写出成功");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

2.InputStreamReader

在这里插入图片描述

2.1构造方法

  1. InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader。
  2. InputStreamReader(InputStream in, Charset cs) 创建使用给定字符集的 InputStreamReader。
  3. InputStreamReader(InputStream in, CharsetDecoder dec) 创建使用给定字符集解码器的 InputStreamReader。
  4. InputStreamReader(InputStream in, String charsetName) 创建使用指定字符集的 InputStreamReader。

2.2常用方法

  1. void
    close() 关闭该流。
  2. String
    getEncoding() 返回此流使用的字符编码的名称。
  3. int
    read() 读取单个字符。
  4. int
    read(char[] cbuf, int offset, int length) 将字符读入数组中的某一部分。
  5. boolean
    ready() 告知是否准备读取此流。
//读取操作
	@Test
	void reader() {
		try {
			FileReader fr=new FileReader(new File("out.txt"));
			int c=-1;
			while((c=fr.read())!=-1) {
				System.out.print((char)c);
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
@Test
	void reader01() {
		//字节输出流,交给字符输出流
		try {
			FileInputStream fileInputStream=new FileInputStream(new File("out.txt"));
			//使用文件所有编码读取到内存中
			InputStreamReader isr=new InputStreamReader(fileInputStream,"utf-8");
			//获取当前所用编码
			System.out.println(isr.getEncoding());
			int c=-1;
			while((c=isr.read())!=-1) {
				System.out.print((char)c);
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

二.缓冲流

  • 缓冲流主要是提高读写速度.
  • 缓冲流的默认缓冲区大小是8kb,是8192个字节
  • 在这里插入图片描述

1.字节缓冲流

1.1BufferedInputStream

1.1.1构造方法

  1. BufferedInputStream(InputStream in) 创建 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。
  2. BufferedInputStream(InputStream in, int size) 创建具有指定缓冲区大小的 BufferedInputStream,并保存其参数,即输入流 in,以便将来使用。

基本操作

  • 创建字节输入流
  • 字节输入缓冲流
  • 读取内容
  • 关闭资源
//字节输入缓冲流
	@Test
	void readbyte() {
		//字节输入流
		try {
			FileInputStream fis=new FileInputStream(new File("bufferio.txt"));
			//缓冲流
			BufferedInputStream bis=new BufferedInputStream(fis);
			//存入数组中
			byte[] bytes=new byte[fis.available()];
			bis.read(bytes);
			System.out.println(new String(bytes));
			bis.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

1.2BufferedOutputStream

1.2.1构造方法

  1. BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的基础输出流。
  2. BufferedOutputStream(OutputStream out, int size) 创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的基础输出流。

基本步骤

  • 创建字节输出流
  • 字节输出缓冲流
  • 使用缓冲流写
  • 关闭资源
//字节输出缓冲流
	@Test
	void  byteout() {
		//创建输出缓冲流
		try {
			FileOutputStream fos=new FileOutputStream(new File("bufferio.java"));
			//字节输出缓冲流
			BufferedOutputStream bos=new BufferedOutputStream(fos);
			//使用缓冲流写
			bos.write("这是缓冲流的操作".getBytes());
			//关闭资源
			bos.flush();
			bos.close();
			fos.close();
			System.out.println("操作成功");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

2.字符缓冲流

2.1BufferedWriter

2.1.1构造方法

  1. BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输出流。
  2. BufferedWriter(Writer out, int sz) 创建一个使用指定大小输出缓冲区的新缓冲字符输出流。

2.2BufferedReader

2.2.1构造方法

  1. BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流。
  2. BufferedReader(Reader in, int sz) 创建一个使用指定大小输入缓冲区的缓冲字符输入流。
@Test
	void IO02() {
		//字符缓冲流
		File file=new File("D:\\123\\hello.txt");
		
		try {
			Reader read=new FileReader(file);
			//缓冲流字符对象
			BufferedReader br=new BufferedReader(read);
			char[] c=new char[10];
			//循环读出写出
			int len=0;
			while((len = br.read(c))!=-1) {
				System.out.println(c);
			}
			//关闭资源
			br.close();
			read.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
//字符输入缓冲流
	@Test
	void readbyte() {
		//源文件
		File file = new File("bufferio.txt");
		try {
			//字节输入流
			FileInputStream fis=new FileInputStream(file);
			//转换流
			InputStreamReader isr=new InputStreamReader(fis,"GBK");
			//字符输入缓冲流
			BufferedReader br=new BufferedReader(isr,1024);
			//读取文件
			char[] c=new char[fis.available()];
			br.read();
			//关闭资源
			br.close();
			isr.close();
			fis.close();
			System.out.println("操作成功");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
  • 相同的写法
@Test
	void readbyte01() {
		try {
			//字符输入缓冲流
			BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(new File("bufferio.txt")),"GBK"),1024);
			//读取文件
			char[] c=new char[10];
			br.read();
			//关闭资源
			br.close();
			System.out.println("操作成功");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值