笔记(十四):字符流


java IO按照读写单位将流分为了两类:
1.字节流:InputStream,OutputStream读写单位为字节;
2.字符流:Reader,Writer读写单位为字符

在使用字节流读取写入数据的时候,要将对应的字符转换为相关的字节数据,涉及到GBK,UTF-8等字符集的问题
但如果使用了字符流来操作数据时,就不用考虑这些问题了。

字节流转换字符流输出

我们所获取的IO对象通常是字节流
要想获得字符流,首先一定要将其转换,而使用转换流将字节流转换为字符流是一种常见操作。具体操作如下:

package com.tedu.io;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

/**
 * 转换流是字符流的一对实现类,是一对高级流
 * 转换流不会作为终端流使用,但是对于我们读取文本数据时
 * 在流连接中时非常重要的一环
 * @author Wildmess
 *
 */
public class OutputStreamWriterDemo {
	public static void main(String[] args) throws IOException {
		FileOutputStream fos = new FileOutputStream("osw.txt");
		OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");
		
		/*
		 * osw写出字符的方法中
		 * 会按照实例化对象时指定的字符集转换成字节再输出
		 */
		
		String data  = "中华人民共和国";
		osw.write(data);
		System.out.println("程序结束!");
		
		osw.close();		
	}
}

字节流转换字符流输入

同理,输出可以字节流转换为字符流输出,输入也要字节流转换字符流输入。
具体代码如下:

package com.tedu.io;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

/**
 * 使用转换流将输入字节流转换成字符流
 * @author Wildmess
 *
 */
public class InputStreamReaderDemo {
	public static void main(String[] args) throws IOException {
		FileInputStream fis = new FileInputStream("osw.txt");
		InputStreamReader isr = new InputStreamReader(fis, "utf-8");
	
		int d;
		while((d = isr.read())!=-1) {
			System.out.print((char)d);
		}
		System.out.println("\n程序结束!");
		
		isr.close();
	}
}

缓冲字符流

在字符流的基础上加入缓冲机制,能在字符流对字符处理适用性好的基础上,再增加运行效率
在这里插入图片描述

直接使用缓冲字符流

字符缓冲流可以直接实例化对象,需要参数为文件路径和字符集

package com.tedu.io;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;

/**
 * 缓冲字符流
 * java.io.BufferedWrite
 * java.io.BufferedReader
 * 使用缓存对文件的内容进行读写,提高读写效率
 * 
 * java.io.PriterWriter
 * 是BufferedWriter基础上的又一次加工
 * 具有自动刷新换行的功能
 * 
 * @author Wildmess
 *
 */
public class PriterWriterDemo {

	public static void main(String[] args) throws IOException {
		PrintWriter pw = new PrintWriter("pw.txt","utf-8");
		
		pw.println("我爱你!");
		pw.println("祖国!");
		
		System.out.println("程序结束!");
		pw.close();
	}

}

低级流转换成字符缓冲流

如果持有对象为低级流,那么就可以转换为字符缓冲流输出了

package com.tedu.io;

import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

/**
 * 使用字节流转换到PW
 * @author Wildmess
 *
 */
public class PriterWriterDemo2 {

	public static void main(String[] args) throws IOException {
		FileOutputStream fos = new FileOutputStream("pw.txt");
		OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");
		BufferedWriter bw = new BufferedWriter(osw);
		PrintWriter pw = new PrintWriter(bw);
		
		pw.println("我爱你!");
		pw.println("黄河!");
		
		System.out.println("程序结束!");
		
		pw.close();
	}

}

缓冲字符输入流

可以在字符输入流的基础上,加上缓冲,于是就有了缓冲字符输入流

package com.tedu.io;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 缓冲字符输入流
 * @author Wildmess
 *
 */
public class BufferedReaderDemo {

	public static void main(String[] args) throws IOException {
		FileInputStream fis = new FileInputStream("pw.txt");
		InputStreamReader isr = new InputStreamReader(fis,"utf-8");
		BufferedReader br = new BufferedReader(isr);
		
		String line = null;
		while((line = br.readLine()) != null) {
			System.out.println(line);
		}
		
		br.close();
	}

}

总结

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值