DAY21 字符流

字符流

  1. 字符流 = 字节流 + 编码表

  2. 对字符流而言,内部自己维护了一个缓冲区(为了编解码准备)故必须close或flush。

  3. 编解码只针对字符或字符串。

    编码:字符串对象.getbytes("字符集")
    解码:new String(byte[], int offset, int len, "字符集")
    

字符输出流

构造方法

public OutputStreamWrite(OutputStream out)
基于底层字节输出流对象,创建字符输出流对象,基于默认字符集
public OutputStreamWrite(OutputStream out, String charsetName)
基于底层字节输出流对象,创建字符输出流对象,基于指定字符集
FileOutputStream fos = new FileOutputStream"a.txt")创建底层字符流
Writer osr  = new OutputStreamReader(fos)包装成转化流

方法

	public void write(int c)
	public void write(char cbuf)
	public void write(char cbuf, int off, int len)
	public void write(String str)
	public void write(String str,int off, int len)

字符输入流

构造方法

	public InputStreamWrite(InputStream in)
	基于底层字节输入流对象,创建字符输入流对象,基于默认字符集
	public InputStreamReader(InputStream in, String charsetName)
	基于底层字节输入流对象,创建字符输入流对象,基于指定字符集
	FileInputStream fis = new FileInputStream"a.txt")
	Reader isr  = new InputStreamReader(isr)

方法

public int read(int c)
读取单个字符,int返回值第16位表示读取到的一个字符,若返回值-1,读取完毕
public int read(char cbuf)
将字符读入数组,返回值表示读取个数,-1读取完毕
public int read(char cbuf, int off, int len)

转化流的简化
FileWriter (FileReader同),简化的同时,失去了灵活性,不能指定字符集

public FileReader(String FileName)
public FileReader(File file)

缓冲字符流(原理同字节流)

提供的不同于字节流的特殊方法
	BufferedWriter 
		void newLine()//向流中写入和操作系统相关的换行符
	BufferReader
		 void readLine()/可读取一行文本数据,\n或\r即停止,返回null

构造方法

BufferedReader(Reader in//创建一个默认大小输入缓冲区的缓冲字符输入流
BufferedWriter(Writer out//创建一个默认大小输出缓冲区的缓冲字符输出流
	
	//创建缓冲字符字符输入流对象
	BufferedReader bufferedReader = new BufferedReadernew InputStreamReadernew FileInputStream"a.txt")))
	//创建简化版
	BufferedRead br = new BufferedReadernew FileReader"d.txt"))

Tips

  1. 当把文件中的字符一个一个读取出来并显示的时候,中文字符会有问题,因为中文字符对应字节数大于等于2,无法正常显示。
  2. 对于图片和视频,都有自己特殊的编码格式,和字符集编码格式并无关系,故当我们使用字符输入流来读取图片或视频的时候,此时字符输入流要么丢弃,要么用特殊符号表示。
发布了11 篇原创文章 · 获赞 1 · 访问量 233

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览