字符流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 block
e.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()方法进行刷新缓冲流,在关闭的时候也要调用该方法。

最新文章

  1. linux swap 分区那点事儿
  2. VHDL学习之模块调用
  3. javascript之数组操作
  4. UML聚合与组合
  5. 牛客网 --java问答题
  6. 使用grep恢复被删除文件内容【转】
  7. json对象转字符串与json字符串转对象
  8. [string]字符串中几个比较难的算法和容易搞混的题目
  9. Linux C网络编程学习笔记
  10. android 同时发送几条通知
  11. source install sshpass in aix
  12. centos7系统日志时间与系统时间相差8小时
  13. Spring 简单使用IoC与DI——XML配置
  14. 腾讯云CDB回档失败浅析
  15. python框架之Django(14)-rest_framework模块
  16. Vivado使用技巧(1)
  17. [转载]ubuntu防火墙设置
  18. 【Linux技术】linux库文件编写·入门
  19. python入门-操作列表
  20. Android安卓手机游戏开发

热门文章

  1. 【转】gc日志分析工具
  2. 对于System.exit(0)和System.exit(1)的一般理解
  3. RESTful Api 身份认证安全性设计
  4. js获取页面url
  5. 使用jquery.qrcode生成二维码(转)
  6. jQuery动画与特效详解
  7. DevExpress v16.1.5图表、Dashboard等多个控件API发生变化
  8. Android 手机卫士--导航界面1的布局编写
  9. swift-分支
  10. Git 少用 Pull 多用 Fetch 和 Merge