博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA之IO流(字符流)
阅读量:5732 次
发布时间:2019-06-18

本文共 3020 字,大约阅读时间需要 10 分钟。

字符流InputStreamReader和OutputStreamWriter是Writer和Read的子类;是字节流通向字符流的桥梁,也就是可以把字节流转化为字符流。

InputStreamReader 构造方法:

  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。

例如:

FileInputStream s;//文件字节流;try {s = new FileInputStream(path);//根据路径创建一个对象InputStreamReader is=new InputStreamReader(s);//根据文件流创建字符流对象;} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}

  OutputStreamWriter的构造方法

  1. OutputStreamWriter(OutputStream out)
    创建使用默认字符编码的 OutputStreamWriter
  2. OutputStreamWriter(OutputStream out, String charsetName)
    创建使用指定字符集的 OutputStreamWriter。
  3. OutputStreamWriter(OutputStream out, Charset cs)
    创建使用给定字符集的 OutputStreamWriter。
  4. OutputStreamWriter(OutputStream out, CharsetEncoder enc)

    创建使用给定字符集编码器的 OutputStreamWriter。

例如:

InputStreamReader isr;		try {			isr = new InputStreamReader(client.getInputStream());                        //client为Server对象;		} catch (IOException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}

无论是InputStreamReader,还是OutputStreamWriter,我们都需要通过在实例化对象的时候我们给定一个(Inputstream或是Outputstream对象,这个过程也就是把字节流转化为字符流;

而我们之所以要用到字符流,是因为用字符流处理中文比较方便;字节流处理8位数据,而字符流则是用于处理16位数据;但是每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。也就是要实现一次从字节流转化为字符流的过程;

在实际使用中,为了提高效率,我们一般用,BufferedReader和BufferedWrite来处理:

BufferedReader:缓冲字符流:

BufferedReader处理字符流是比较方便的,它可以处理一行数据;直接从文件中读取一行字符串;

BufferedReader一共有两个构造方法:

一、创建一个使用默认大小输入缓冲区的缓冲字符输入流。

BufferedReader o=new BufferedReader(reader);

传入一个Read类(用于读取字符流的抽象类)的对象;

二、创建一个使用指定大小输入缓冲区的缓冲字符输入流。

BufferedReader i=new BufferedReader(reader, sz);

传入一个Read类(用于读取字符流的抽象类)的对象;并且传入一个int型,指定输入缓冲区的大小 ,,没有指定的话是使用默认的大小。大多数情况下,默认值就足够大了。

BufferedReader

我们用第一个实例化的参数来创建一个BufferedReader类的对象:

BufferedReader in= new BufferedReader(new InputStreamReader(System.in));

在JAVA的Server和ServerSocket中我们也用到了BuffererReader的readLine()方法来读取一个行数据:

InputStreamReader isr;		try {			isr = new InputStreamReader(client.getInputStream());			BufferedReader buf = new BufferedReader(isr);			while (isStop) {				String str = buf.readLine(); //读取一行                                            // 如果对到的数据为NUll,则跳出循环				if (str == null)					break;             				System.out.println(str);			}		} catch (IOException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}

BufferedWriter

构造方法:

BufferedWriter(Writer out)

创建一个使用默认大小输出缓冲区的缓冲字符输出流。

BufferedWriter(Writer out, int sz)

创建一个使用给定大小输出缓冲区的新缓冲字符输出流。

实例:

OutputStreamWriter osw;		try {			osw = new OutputStreamWriter(client.getOutputStream());			BufferedWriter bufw = new BufferedWriter(osw);			bufw.write("欢迎连接服务器");			bufw.flush();// 冲洗刷新;		} catch (IOException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}

注意的是,OutputStreamWriter需要调用flush()方法进行刷新缓冲流,在关闭的时候也要调用该方法。

转载于:https://www.cnblogs.com/hesi/p/6089095.html

你可能感兴趣的文章
敏捷项目管理软件禅道正式推出2.3版本
查看>>
机会模型与显著性检验(二)
查看>>
JVM总结四
查看>>
微信小程序数据缓存
查看>>
ElasticSearch简单介绍
查看>>
大话说github创建账号、创建仓库与搭建博客(零)之零代码
查看>>
大数据入行新手如何进行机器学习?
查看>>
Solr开发文档
查看>>
CSS
查看>>
以太坊开发入门,完整入门篇(小白可以看看,高手看看自己有没有遗漏的
查看>>
数据库分页查询语句
查看>>
RightScale提供基于Zend PHP的PaaS服务
查看>>
20170208--shell-for-while循环+小脚本文件的备份
查看>>
Spring整合iBatis
查看>>
getTime
查看>>
Java 并发
查看>>
编码问题
查看>>
Single Threaded Execution----能通过这座桥的,只有一个人
查看>>
js简单的表单验证
查看>>
数据库一些指令总结
查看>>