Java编程那些事儿91——装饰流使用2

11.3.3.2 BufferedReader/BufferedWriter

在进行IO操作时,除了功能以外,程序的执行效率也是必须要考虑的问题。基本的IO类只是注重功能的实现,例如将特定的数据源转换为流对象,而没有过多的关注读写的效率问题,而实际在进行项目开发时,读写效率也是必须要考虑的问题。

为了提高IO类的读写效率,在装饰流中专门制作了一类缓冲流,该类流的作用就是提高流的读写效率,这组缓冲流包含:BufferedInputStream/BufferedOutputStream、BufferedReader/BufferedWriter。

该部分以BufferedReader/BufferedWriter为基础进行介绍。

由于前面介绍DataInputStream/DataOutputStream时,是以文件流作为实体流进行介绍,这里就不再重复了,这里以前面介绍的接收控制台输入为基础介绍缓冲输入流的使用。

由于装饰流在进行嵌套时,只能嵌套相同类型的流,例如InputStream类型的流之间可以嵌套,但是InputStream和Reader两个体系之间的流就无法直接嵌套,为了使用新的IO类带来的特性,在IO类中提供了两个专门的类,实现体系之间的转换,这两个流类被形象的称为“桥接流”。

桥接流主要包含2个,依次是:

1、InputStreamReader

该类实现将InputStream及其子类的对象转换为Reader体系类的对象,实现将字节输入流转换为字符输入流。

2、OutputStreamWriter

该类实现将OutputStream及其子类的对象转换为Writer体系类的对象,实现将字节输入流转换为字符输入流。

这两个桥接流使得字节流可以被转换为字符流,但是需要注意的是,字符流无法转换为字节流。

在读取控制台输入时,直接使用System.in进行读取,虽然在功能上可以实现,但是这种方式读写流的效率比较差,所以在实际使用时一般需要提高读写的效率,这就需要使用装饰流中的缓冲流,这是一个典型的流的嵌套的示例。该代码实现的功能是如果回显用户输入,当用户输入quit时程序退出。该示例的代码如下:

import java.io.*;
/**
* 使用BufferedReader读取控制台输入
*/
public class ReadConsoleWithBuffer {
 public static void main(String[] args) {
  BufferedReader br = null;
  String s = null;
  try{
    //使用流的嵌套构造缓冲流
    br = new BufferedReader(
    new InputStreamReader(System.in));
    do{
     //输出提示信息
     System.out.println("请输入:");
     //按行读取输入
     s = br.readLine();
     //输出用户输入
     System.out.println(s);
    }while(!s.equals("quit"));
  }catch(Exception e){
    e.printStackTrace();
  }finally{
    try{
      br.close();
    }catch(Exception e){
      e.printStackTrace();
    }
  }
 }
}

在该示例代码中,首先使用流的嵌套构建了BufferedReader类型的对象br,然后使用BufferedReader中的readLine方法,每次读取用户输入的一行信息,使用readLine方法读取内容时,系统以”\r\n”作为每次的结束符号,而且读取的内容不包含”\r\n”,当读取到流的末尾时readLine方法的返回值是null。然后使用do-while循环判断用户输入的是否是quit,如果输入的是quit,则程序结束,否则继续下一次循环。

关于BufferedWriter的使用,没有什么特别的地方,这里就不单独举例说明了。

11.3.3.3 装饰流小结

前面介绍了两类比较常见的装饰流,在实际的开发中,根据逻辑的需要还可能会用到其它的装饰流,这些装饰流的使用和前面介绍的类类似,在实际使用时通过查阅JDK API文档找到根据功能找到合适的装饰流,然后进行使用即可。

时间: 2024-10-04 10:25:16

Java编程那些事儿91——装饰流使用2的相关文章

Java编程那些事儿90——装饰流使用1

11.3.3 装饰流使用 除了按照流的方向可以把流划分为输入流和输出流两类,按照流读写数据的基本单位把流划分为字节流和字符流两类以外,还可以按照流是否直接连接实际数据源,例如文件.网络.字节数组等,将流又可以划分为实体流和装饰流两大类. 其中实体流指直接连接数据源的流类,如前面介绍的FileInputStream/FileOutputStream和FileReader和FileWriter,该类流直接实现将数据源转换为流对象,在实体流类中实现了流和数据源之间的转换,实体流类均可单独进行使用. 而

Java编程那些事儿52—方法声明

第七章 方法 方法(method),在面向过程的语言中称作函数(function),在汇编语言中称作子程序,是一个代码功能块,实现某个特定的功能.在实际的程序开发中,方法是一种基础的组织代码的方式.本部分就介绍方法相关的概念.相关语法以及实际使用时需要注意的问题. 7.1 方法概述 方法的概念来源于数学上的函数,在数学中,当数据具有一定的规律时,就是用一个函数来代码该数字的规律,例如f(n)=n则代表1.2.3.--这样的一个数列.在数学上n是参数,对于确定的n值只有一个f(n)的值和它对应.

Java编程那些事儿25—位运算符

4.5 二进制运算符 由于计算机内部的数据都以二进制的形式存在,所以在Java语言中提供了直接操作二进制的运算符,这就是下面要讲解的位运算符和移位运算符. 使用二进制的运算符,可以直接在二进制的基础上对数字进行操作,执行的效率比一般的数学运算符高的多,该类运算符大量适用于网络编程.硬件编程等领域. 二进制运算符在数学上的意义比较有限. 在Java代码中,直接书写和输出的数值默认是十进制,Java代码中无法直接书写二进制数值,但是可以书写八进制和十六进制数字,八进制以数字0开头,例如016,十六进

Java编程那些事儿3——你适合学习程序设计吗?

 Java编程那些事儿3--你适合学习程序设计吗?作者:陈跃峰出自:http://blog.111cn.net/mailbomb          程序设计是一个技术活,所以不是适合所有的人.现在很多人听说程序设计人员待遇如何如何的好,都一窝蜂的来学习程序,其实这个现象很不正常,因为程序不一定适合你.其实对于一个人来说,适合你的才是最好的.         就像现在很多小孩子都被家长逼着去学钢琴啊什么,有些小孩根本没有艺术细胞的,所以学习的效果就是差强人意了.         其实程序设计最需要

Java编程那些事儿4——如何学好程序设计?

  Java编程那些事儿4--如何学好程序设计?作者:陈跃峰出自:http://blog.111cn.net/mailbomb          俗话说"兴趣是最好的老师",但是只靠兴趣是远远不够的,还需要付出艰辛的努力.程序设计是一种技能,需要在较短的时间内学会,就不能像学习汉语一样,通过十几年甚至更长的时间来学好,也不能像英语那样进行业余学习,以至很多大学毕业的人英语水平也不敢恭维,也达不到实用的程度.         那么如何学好程序设计呢?或者更现实一点,如何在短时间内成为一个

Java编程那些事儿1——序言

 序言          从大学毕业到现在,马上就六年了,这六年中从事过开发,也从事培训工作,相比而言,参加培训工作的时间要长一些.由于工作的特点,遇到了各种各样的学生,在学习编程时遇到了一系列的问题,也有很多迷茫的时候,希望通过编写本书,把相关的问题进行一下总结,把自己的经验和大家进行分享.当然由于一些知识也只是个人见解,也希望大家积极指正,帮助编程的初学者,以及程序开发人员深刻理解基础的概念,更好的学习编程和从事开发工作.         编写一本书,总要有个名字吧,姑且把书名叫做<Java

Java编程那些事儿103——网络编程技术2

13.2.3 TCP编程 按照前面的介绍,网络通讯的方式有TCP和UDP两种,其中TCP方式的网络通讯是指在通讯的过程中保持连接,有点类似于打电话,只需要拨打一次号码(建立一次网络连接),就可以多次通话(多次传输数据).这样方式在实际的网络编程中,由于传输可靠,类似于打电话,如果甲给乙打电话,乙说没有听清楚让甲重复一遍,直到乙听清楚为止,实际的网络传输也是这样,如果发送的一方发送的数据接收方觉得有问题,则网络底层会自动要求发送方重发,直到接收方收到为止. 在Java语言中,对于TCP方式的网络编

Java编程那些事儿92——IO使用注意问题

11.3.4 注意问题 上面介绍了IO类的基本使用,熟悉了实体流和装饰流的基本使用,但是在IO类实际使用时,还是会遇到一系列的问题,下面介绍一些可能会经常遇到的问题. 11.3.4.1 类的选择 对于初次接触IO技术的初学者来说,IO类体系博大精深,类的数量比较庞大,在实际使用时经常会无所适从,不知道该使用那些类进行编程,下面介绍一下关于IO类选择的一些技巧. 选择类的第一步是选择合适的实体流. 选择实体流时第一步是按照连接的数据源种类进行选择,例如读写文件应该使用文件流,如FileInputS

Java 编程要点之 I/O 流详解

本文详细介绍了 Java I/O 流的基础用法和原理. 字节流(Byte Streams) 字节流处理原始的二进制数据 I/O.输入输出的是8位字节,相关的类为 InputStream 和 OutputStream. 字节流的类有许多.为了演示字节流的工作,我们将重点放在文件 I/O字节流 FileInputStream 和 FileOutputStream 上.其他种类的字节流用法类似,主要区别在于它们构造的方式,大家可以举一反三. 用法 下面一例子 CopyBytes, 从 xanadu.t