`

InputStreamReader 源码分析

阅读更多
InputStreamReader字节流字符流之间架起了桥梁。能够读取字节数组并使用指定的字符集解码成字符流。

每次调用InputStreamReader的read方法会从底层字节流读取一个或多个字节。为了确保有效的转换,可能会从底层流中读取更多的字节。

为了提高性能,可以考虑结合BufferedReader使用:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));


public class InputStreamReader extends Reader {  
  
	// 流解码类,所有的调用都是交给它完成。  
	private final StreamDecoder sd;  

	// 使用默认的字符集名来创建实例  
	public InputStreamReader(InputStream in) {  
		super(in);  
		try {  
			sd = StreamDecoder.forInputStreamReader(in, this, (String)null); // ## check lock object  
		} catch (UnsupportedEncodingException e) {  
		// The default encoding should always be available  
			throw new Error(e);  
		}  
	}  
  
	// 根据指定的字符集名来创建实例  
	public InputStreamReader(InputStream in, String charsetName)  
		throws UnsupportedEncodingException  
	{  
		super(in);  
		if (charsetName == null)  
			throw new NullPointerException("charsetName");  
		sd = StreamDecoder.forInputStreamReader(in, this, charsetName);  
	}
  
	// 根据指定的字符集来创建实例  
	public InputStreamReader(InputStream in, Charset cs) {  
		super(in);  
		if (cs == null)  
			throw new NullPointerException("charset");  
		sd = StreamDecoder.forInputStreamReader(in, this, cs);  
	}
  
	// 根据指定的字符集解码器来创建实例  
	public InputStreamReader(InputStream in, CharsetDecoder dec) {  
		super(in);  
		if (dec == null)  
			throw new NullPointerException("charset decoder");  
		sd = StreamDecoder.forInputStreamReader(in, this, dec);  
	}
  
	// 获取该流使用的字符编码名  
	public String getEncoding() {  
		return sd.getEncoding();  
	}
  
	// 读取一个字符  
	public int read() throws IOException {  
		return sd.read();  
	}
  
	// 读取一串字符到字符数组中  
	public int read(char cbuf[], int offset, int length) throws IOException {  
		return sd.read(cbuf, offset, length);  
	}
  
	// 查看流是否准备好用于读取。  
	public boolean ready() throws IOException {  
		return sd.ready();  
	}
  
	// 关闭Reader  
	public void close() throws IOException {  
		sd.close();  
	}
}
分享到:
评论

相关推荐

    Java中的InputStreamReader和OutputStreamWriter源码分析_动力节点Java学院整理

    Java中的InputStreamReader和OutputStreamWriter源码分析 InputStreamReader是Java中用于将字节输入流转换成字符输入流的类,它继承自Reader类。下面是InputStreamReader的源码分析: 构造方法 InputStreamReader...

    Java BufferedWriter BufferedReader 源码分析

    源码分析通常会涉及这些方法的具体实现,包括如何管理缓冲区,何时从底层流读取数据,以及如何处理行结束符等。 综上所述,BufferedWriter和BufferedReader是Java IO流中的重要组件,它们通过内部缓冲机制提升了IO...

    读取网页源码(不会出现网页乱码)

    在IT行业中,获取网页源码是一项基础且重要的技能,它能帮助我们理解网站结构、解析数据、自动化测试等。在处理网页源码时,我们...在实际开发中,理解并灵活运用这些技术,能够帮助我们更有效地处理和分析网页数据。

    java 写的字符编码转换工具(附带源码)

    7. **源码分析**:提供的源码可以作为学习和理解字符编码转换机制的一个实例。通过阅读源码,我们可以深入理解Java如何处理编码转换,以及如何设计和实现这样一个工具。 这个工具可能包含了一个命令行界面或者图形...

    Java 中的FileReader和FileWriter源码分析_动力节点Java学院整理

    Java中的`FileReader`和`FileWriter`是用于读写文件的基本类,它们分别继承自`InputStreamReader`和`OutputStreamWriter`。这两个类是Java IO流模型中的字符流(Character Stream)部分,处理数据的方式是以字符为...

    Java Telnet客户端实例源码

    本文将详细讲解如何利用Java开发一个Telnet客户端,并提供相关源码分析。 首先,我们要了解Java中的Socket编程是实现Telnet客户端的基础。Java的`java.net.Socket`类提供了创建TCP连接的能力,而`java.io`包下的...

    jsch源码和jar包.rar

    **源码分析** JSCH源码位于`jsch-0.1.55-源码.zip`文件中,深入研究源码有助于理解其内部工作原理。主要类包括: - `JSch`:JSCH的主要入口类,用于设置全局配置和创建`Session`。 - `Session`:表示SSH会话,负责...

    java根据网址获取源码

    ### Java根据网址获取源码 在Java开发过程中,有时候我们需要从网络上获取特定网页的源代码来进行分析或者处理。这通常涉及到HTTP请求的发送与响应的处理。下面将详细介绍如何利用Java来实现这一功能。 #### 核心...

    java上传图片到服务器源码下载

    在Java编程领域,上传图片到服务器是一项常见的任务,涉及到网络通信、文件处理和服务器端的数据存储。...而对于经验丰富的开发者,源码分析则有助于他们在特定场景下定制更高效、更安全的文件上传解决方案。

    精典源码之TXT文本阅读器源码.zip

    通过分析和学习这份源码,我们可以深入理解文本阅读器的开发过程,掌握相关技术点,并可能以此为基础进行二次开发或优化。 1. **文本解析**: - TXT文件是纯文本格式,不包含任何格式化信息,只有字符内容。在读取...

    java公网ip查询工具(附源码).zip

    Java公网IP查询工具是一款基于Java语言开发的实用小软件,主要功能是获取互联网上的设备的公网IP地址。这款工具能够帮助开发者或者...通过源码分析,我们可以深入理解Java网络编程的原理和实践,增强我们的编程能力。

    Android 英语朗读器源码.zip

    【Android 英语朗读器源码分析】 在Android平台上,开发一款英语朗读器是一项技术挑战,涉及到语音合成(Text-to-Speech, TTS)技术、音频处理、用户界面设计等多个方面。这款"Android 英语朗读器源码"提供了一个...

    数据存储源码

    在Android开发中,数据存储是不可或缺的一部分,它用于持久化应用程序的数据,以便在应用程序关闭后仍然可以访问。这个“数据存储源码”提供了...通过分析这个源码,初学者可以更好地理解和实践Android的数据存储功能。

    安卓Android源码——开发 SD卡的使用.zip

    本篇将深入探讨在Android开发中,如何有效地利用SD卡,并提供相关的源码分析。 1. **权限设置** 在AndroidManifest.xml文件中,为应用添加读写SD卡的权限: ```xml ``` 自Android 6.0 (API level 23)开始,...

    Android程序研发源码Android Txt文本阅读器源码.zip

    在Android平台上,开发一款TXT文本阅读器涉及到许多关键知识点,这些知识涵盖了Android应用的基础架构、UI设计、文件操作以及文本处理等。...通过分析和学习这个源码,开发者可以深入理解Android应用开发的多个方面。

    Android Socket编程客户端服务器端源码

    在Android开发中,Socket编程是实现设备间通信的重要手段,特别是在构建网络应用时。本教程将深入探讨Android Socket编程的...提供的源码实例是理解这一过程的好起点,通过分析和调试,可以加深对Socket编程的理解。

    Tesseract-ocr数字识别源码

    在您的“Tesseract-ocr数字识别源码”中,您可能已经找到了一个针对数字识别优化的版本,尤其适合处理紧凑排列或间隙较小的数字图像。 Tesseract OCR的工作原理主要包括以下几个步骤: 1. 预处理:在识别之前,...

    android执行adb shell命令源码

    本篇文章将深入讲解如何在Android代码中执行`adb shell`命令,并通过源码分析来理解其工作原理。 首先,`adb shell`命令是通过ADB工具在设备的shell环境中执行命令。在Android应用中,我们通常会用到`Runtime`类...

    简单的用户和客户端网络聊天室源码

    源码分析: 1. **主类**:项目可能包含一个或多个主类,如服务器端的`ServerMain`和客户端的`ClientMain`,它们启动程序并初始化必要的组件。 2. **服务器类**:服务器端的核心类可能命名为`Server`,它负责监听、...

Global site tag (gtag.js) - Google Analytics