JAVA中InputStreamReader流怎么构造 | 您所在的位置:网站首页 › c语言中打开一个文件就意味着产生了一个文件 › JAVA中InputStreamReader流怎么构造 |
JAVA中InputStreamReader流怎么构造
发布时间:2023-05-06 10:00:31
来源:亿速云
阅读:76
作者:zzz
栏目:开发技术
本篇内容主要讲解“JAVA中InputStreamReader流怎么构造”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JAVA中InputStreamReader流怎么构造”吧! 一、InputStreamReader类API文档说明:InputStreamReader类是从字节流到字符流的桥接器:它使用指定的字符集读取字节并将它们解码为字符。 它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集。每次调用一个InputStreamReader的read()方法都可能导致从底层字节输入流中读取一个或多个字节。 为了实现字节到字符的有效转换,可以从基础流中提取比满足当前读取操作所需的更多字节。为了获得最高效率,请考虑在BufferedReader中包装InputStreamReader 其继承Reader类 public class InputStreamReader extends Reader {}1)字节流到字符流的桥梁怎么理解? 1、计算机存储的单位是字节,如尽管txt文本中有中文汉字这样的字符,但是对计算机而言,其是字节形式存在的 2、字节流读取是单字节读取,但是不同字符集解码成字符需要不通过个数,因此字节流读取会报错 3、 那么就需要一个流把字节流读取的字节进行缓冲而后在通过字符集解码成字符返回,因而形式上看是字符流 4、InputStreamReader流就是起这个作用,实现从字节流到字符流的转换 2)使用指定的字符集读取字节并将它们解码为字符怎么理解? 字节本质是8个二进制位,且不同的字符集对同一字节解码后的字符结果是不同的,因此在读取字符时务必要指定合适的字符集,否则读取的内容会产生乱码 3)它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集怎么理解? 意味着InputStreamReader类有多个方法或者多个构造方法来设置字符集 4)每次调用一个InputStreamReader的read()方法都可能导致从底层字节输入流中读取一个或多个字节怎么理解? read()方法会尝试尽量冲底层字节流中读取2个字符到字符缓冲区中,注意这里是尽量,若遇到文件最后字符,则就只能读取到1个字符,因此每次read()方法读取的字节数是不定的 5)为了实现字节到字符的有效转换,可以从基础流中提取比满足当前读取操作所需的更多字节,请考虑在BufferedReader中包装InputStreamReader 该话暂未理解,需要了解BufferedReader类后对比读取效率才可得出答案 二、InputStreamReader构造方法1)使用默认的字符集构造InputStreamReader流:本质是初始化其实例域的一个变量,并未看到任何关于字符集的设置 public InputStreamReader(InputStream in) { super(in); try { sd = StreamDecoder.forInputStreamReader(in, this, (String)null); } catch (UnsupportedEncodingException e) { throw new Error(e); } }2)使用指定的字符集名称构造InputStreamReader流:本质是初始化其实例域的一个变量,可以发现字符集是初始化方法的第三个参数 public InputStreamReader(InputStream in, String charsetName) throws UnsupportedEncodingException { super(in); if (charsetName == null) throw new NullPointerException("charsetName"); sd = StreamDecoder.forInputStreamReader(in, this, charsetName); }3)sd变量:本质是StreamDecoder类的对象,InputStreamReader的构造方法就是在给此对象做初始化操作 private final StreamDecoder sd;三、InputStreamReaderAPI1、我们可以发现InputStreamReaderAPI类的所有API都是利用了sd变量的,因此可以看出InputStreamReader类的方法本质是调用StreamDecoder类方法 2、因此我们需要了解StreamDecoder类,以便了解到InputStreamReader类的方法是如何起实质性作用的 /** * 获取设置的字符集 */ public String getEncoding() { return sd.getEncoding(); } /** * 读取流并返回一个字符,遇到文件末尾返回-1 */ public int read() throws IOException { return sd.read(); } /** * 读取字符到字符数组的部分中,遇到文件末尾返回-1 */ 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(); } /** * 关闭流并释放资源 */ public void close() throws IOException { sd.close(); }四、InputStreamReader类与FileReader类关系1、FileReader类仅仅是InputStreamReader的简单衍生并未扩展任何功能 2、FileReader类读取数据实质是InputStreamReader类在读取,而InputStreamReader读取数据实际是StreamDecoder类读取 3、因此在使用字符输入流的时候实际是StreamDecoder类在发挥作用 到此,相信大家对“JAVA中InputStreamReader流怎么构造”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习! 推荐阅读: java中的杨辉三角怎么利用int类型二维数组实现 PHP怎么与java实现通信免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:[email protected]进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。 java inputstreamreader 上一篇新闻:java获取到heapdump文件后怎么快速分析 下一篇新闻:Java怎么判断变量是否为空问题 猜你喜欢 vue结合vant如何实现联动效果 Python中的tkinter库怎么用 Python webargs模块怎么使用 微信小程序怎么实现购物车选择规格颜色效果 mybatis group by substr函数传参报错怎么解决 net6+vue插件axios后端接收参数有哪些 Java线程池实现原理是什么 Spring Security认证的方法是什么 Mybatis怎么传入字符串参数,分割并遍历 C语言怎么实现汉诺塔 |
CopyRight 2018-2019 实验室设备网 版权所有 |