字节流通向字符流的桥梁:InputStreamReader

简介:
public class InputStreamReader
extends Reader

InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。

为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:

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


构造方法摘要
InputStreamReader(InputStream in)
          创建一个使用默认字符集的 InputStreamReader。
InputStreamReader(InputStream in, Charset cs)
          创建使用给定字符集的 InputStreamReader。
InputStreamReader(InputStream in, CharsetDecoder dec)
          创建使用给定字符集解码器的 InputStreamReader。
InputStreamReader(InputStream in, String charsetName)
          创建使用指定字符集的 InputStreamReader。
 
方法摘要
 void close()
          关闭该流并释放与之关联的所有资源。
 String getEncoding()
          返回此流使用的字符编码的名称。
 int read()
          读取单个字符。
 int read(char[] cbuf, int offset, int length)
          将字符读入数组中的某一部分。
 boolean ready()
          判断此流是否已经准备好用于读取。

例:Demo

import java.io.*;
class InputStreamReaderDemo {
  public static void transReadNoBuf() throws IOException {
    /**
     * 没有缓冲区,只能使用read()方法。
     */
    //读取字节流
    //InputStream in = System.in;//读取键盘的输入。
    InputStream in = new FileInputStream("D:\\demo.txt");//读取文件的数据。
    //将字节流向字符流的转换。要启用从字节到字符的有效转换,
    //可以提前从底层流读取更多的字节.
    InputStreamReader isr = new InputStreamReader(in);//读取
    //综合到一句。
    //InputStreamReader isr = new InputStreamReader(
    //new FileInputStream("D:\\demo.txt"));
      
    char []cha = new char[1024];
    int len = isr.read(cha);
    System.out.println(new String(cha,0,len));
    isr.close();

  }
  public static void transReadByBuf() throws IOException {
    /**
     * 使用缓冲区 可以使用缓冲区对象的 read() 和  readLine()方法。
     */
    //读取字节流
    //InputStream in = System.in;//读取键盘上的数据
    InputStream in = new FileInputStream("D:\\demo.txt");//读取文件上的数据。
    //将字节流向字符流的转换。
    InputStreamReader isr = new InputStreamReader(in);//读取
    //创建字符流缓冲区
    BufferedReader bufr = new BufferedReader(isr);//缓冲
    //BufferedReader bufr = new BufferedReader(
    //new InputStreamReader(new FileInputStream("D:\\demo.txt")));可以综合到一句。
      /*int ch =0;
    ch = bufr.read();
    System.out.println((char)ch);
    */
    String line;
    while((line = bufr.readLine())!=null){
      System.out.println(line);
    }
    isr.close();
  }
}


目录
相关文章
|
5天前
|
存储 安全 Java
字节流和字符流有哪些区别
字节流和字符流是Java中两种基本的I/O流类型。字节流以8位字节为单位处理数据,适用于所有类型的文件;字符流以16位Unicode字符为单位,专为文本文件设计,自动完成字符编码转换,更适合文本处理。
|
2月前
|
Java
字节流与字符流的差异
【10月更文挑战第13天】总的来说,字节流和字符流各有其特点和适用范围,我们需要根据具体的需求来选择使用哪种类型的流。在实际应用中,还需要注意编码问题、性能优化等方面,以确保数据的正确处理和高效传输。
|
3月前
|
移动开发 Java Linux
IO流:字节流
在Java编程中,IO流是一个核心概念,用于与文件、网络、内存等数据源交互。Java的IO库提供丰富的类和方法支持数据读写。IO流分为字节流和字符流,前者可操作所有类型文件,后者仅限纯文本文件。`FileOutputStream`用于向文件写入字节,支持多种写入方式,并可通过构造函数的布尔参数控制是否追加写入。`FileInputStream`则用于从文件读取字节,支持逐字节或批量读取。文件拷贝可通过结合读写操作实现,高效的方法是一次性读取并写入大容量数组。处理IO流时需注意异常管理,合理使用try-catch-finally结构确保资源正确释放。JDK7及以后版本提供了自动关闭资源的简化语法
51 10
|
4月前
|
存储 Java 索引
|
4月前
|
存储 移动开发 程序员
|
6月前
|
存储 Java 数据库
面试官:字节流可以处理一切文件为什么还需要字符流呢?
【6月更文挑战第8天】面试官:字节流可以处理一切文件为什么还需要字符流呢?
64 7
|
5月前
|
存储 缓存 Java
JavaSE—IO流之字符流与字节流
JavaSE—IO流之字符流与字节流
|
6月前
字节流和字符流
字节流和字符流
34 0
|
7月前
|
存储 Java 开发者
Java的输入输出流:字节流与字符流的技术性探讨
Java的输入输出流:字节流与字符流的技术性探讨
45 0
|
7月前
|
Java API 数据库
IO流【转换流、字符输出流、数据流、对象流】(三)-全面详解(学习总结---从入门到深化)
IO流【转换流、字符输出流、数据流、对象流】(三)-全面详解(学习总结---从入门到深化)
70 0