zoukankan      html  css  js  c++  java
  • JAVA之IO流(字符流)

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

  • 相关阅读:
    C++操作文件行(读取,删除,修改指定行)
    Windows注册表中修改UAC(用户账号控制)及批处理脚本
    Centos7.x 安装libevent2.x
    【Docker】:使用docker安装redis,挂载外部配置和数据
    【Docker】:使用docker安装mysql,挂载外部配置和数据
    开源定时任务框架Quartz(二)
    开源定时任务框架Quartz(一)
    Spring Boot系列教程十四:Spring boot同时支持HTTP和HTTPS
    数据结构与算法:单向链表实现与封装(有头)
    【C++札记】指针函数与函数指针
  • 原文地址:https://www.cnblogs.com/hesi/p/6089095.html
Copyright © 2011-2022 走看看