深度学习InputStreamReader类

news2025/2/2 2:56:51

在这里插入图片描述

  咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~


🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!

环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

文章目录

  • 前言
  • 摘要
  • `InputStreamReader`类
    • 概述
    • 源代码解析
    • 应用场景案例
      • 例1:读取网络资源
      • 例2:读取本地文件
    • 优缺点分析
    • 类代码方法介绍
      • 构造方法
      • 方法
    • 测试用例
      • 用例代码演示
      • 测试结果
      • 用例代码解析
    • 不关IO流会当如何?
    • 全文小结
    • 总结
  • 附录源码
  • ☀️建议/推荐你
  • 📣关于我

前言

  在Java开发中,输入输出流是非常重要的一个部分。而InputStreamReader类则是常用于将字节流转换为字符流的类,可以帮助程序员处理输入输出流时的一些问题。

摘要

  InputStreamReader类是Java中的一个字符流类,它用来将字节流转换为字符流,以便更容易的进行处理。在输入流中,InputStreamReader类可以将一个字节输入流转换为字符输入流。在输出流中,InputStreamReader类可以将一个字符输出流转换为字节输出流。这个类的作用是在不同的输入输出流之间转换数据类型,解决了数据类型不匹配的问题。

InputStreamReader

概述

  InputStreamReader类是Java.io包下的一个类,它可以将字节流转换为字符流。InputStreamReader类提供了多个构造函数,可以通过指定不同的编码方式来将字节流转换为字符流。在使用InputStreamReader时,需要注意输入流的字符编码和输出流的字符编码应该保持一致,否则会出现乱码的情况。

源代码解析

InputStreamReader类的关键代码如下所示:

public class InputStreamReader extends Reader {
    private final StreamDecoder sd;
    ...
    public InputStreamReader(InputStream in) {
        super(in);
        try {
            sd = StreamDecoder.forInputStreamReader(in, this, (String)null);
        } catch (UnsupportedEncodingException e) {
            throw new Error(e);
        }
    }
    ...
    public String getEncoding() {
        return sd.getEncoding();
    }
    ...
}

  从源代码可以看到,在InputStreamReader类的构造函数中,调用了StreamDecoder的forInputStreamReader()方法,将字节流转换为字符流。在这个过程中,我们可以通过getEncoding()方法来获取字符编码,以便更好的进行字节流和字符流之间的转换。

应用场景案例

下面将介绍InputStreamReader类在实际开发中的应用场景案例。

例1:读取网络资源

    //读取网络资源
    public static void testReadURL() throws IOException {
        URL url = new URL("http://www.baidu.com");
        URLConnection conn = url.openConnection();
        InputStream in = conn.getInputStream();
        InputStreamReader isr = new InputStreamReader(in);
        BufferedReader br = new BufferedReader(isr);

        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }

        br.close();
        isr.close();
        in.close();
    }

  这个示例演示了如何通过InputStreamReader类从网络中读取资源。在这个例子中,我们首先使用URL类打开一个连接,然后再从连接中获取字节输入流,接着将字节输入流转换为字符输入流,最后使用缓冲字符流来读取数据,并输出到控制台上。

案例演示结果如下:

在这里插入图片描述

例2:读取本地文件

    public static void testReadFile() throws IOException {
        FileInputStream fis = new FileInputStream("./template/fileTest.txt");
        InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
        BufferedReader br = new BufferedReader(isr);

        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }

        br.close();
        isr.close();
        fis.close();
    }

    public static void main(String[] args) throws IOException {
        testReadFile();
    }

  这个示例演示了如何使用InputStreamReader类从本地文件中读取资源。在这个例子中,我们首先使用FileInputStream类打开一个本地文件,然后再从文件中获取字节输入流,接着将字节输入流使用"UTF-8"编码方式转换为字符输入流,最后使用缓冲字符流来读取数据,并输出到控制台上。

案例演示结果如下:

在这里插入图片描述

优缺点分析

  InputStreamReader类的优点在于可以将字节流转换为字符流,方便程序员进行字符处理。同时,也提供了多种编码方式来进行转换,可以适应不同的字符编码需求。

  缺点在于需要注意输入流和输出流的字符编码应该保持一致,否则会出现乱码的情况。

类代码方法介绍

构造方法

  • InputStreamReader(InputStream in):创建一个使用默认字符集的InputStreamReader对象。
  • InputStreamReader(InputStream in, Charset charset):创建一个使用指定字符集的InputStreamReader对象。
  • InputStreamReader(InputStream in, CharsetDecoder dec):创建一个使用指定字符集解码器的InputStreamReader对象。
  • InputStreamReader(InputStream in, String charsetName):创建一个使用指定字符集名称的InputStreamReader对象。
  • InputStreamReader(InputStream in, CharsetDecoder dec, int minCharBufferSize):创建一个使用指定字符集解码器和最小字符缓冲区大小的InputStreamReader对象。

方法

  • int read() throws IOException:读取一个字符并返回。
  • int read(char cbuf[]) throws IOException:读取字符到缓冲区中,并返回字符个数。
  • int read(char cbuf[], int offset, int length) throws IOException:读取指定长度的字符到缓冲区中,并返回字符个数。
  • boolean ready() throws IOException:检查此流是否准备好读取。
  • boolean markSupported():判断此流是否支持mark和reset方法。
  • void mark(int readAheadLimit) throws IOException:标记此流的当前读取位置。
  • void reset() throws IOException:将此流的读取位置重置为标记位置。
  • long skip(long n) throws IOException:跳过n个字符的读取。
  • String getEncoding():获取此流使用的字符编码名称。
  • void close() throws IOException:关闭此流并释放与之关联的所有系统资源。

测试用例

下面给出了InputStreamReader类的一个测试用例。

用例代码演示

package com.example.javase.io.reader.inputStreamReader;

import java.io.*;

/**
 * @author bug菌
 * @version 1.0
 * @date 2023/10/19 10:37
 */
public class InputStreamReaderTest {
    public static void main(String[] args) throws IOException {

        FileInputStream fis = new FileInputStream("./template/fileTest.txt");
        InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
        BufferedReader br = new BufferedReader(isr);

        String line = br.readLine();
        System.out.println("line:" + line);
        br.close();
        isr.close();
        fis.close();
    }
}

测试结果

根据如上测试用例本地测试结果如下,仅供参考:

在这里插入图片描述
  可以看到测试用例结合InputStreamReader类的使用,成功将fileTest.txt文件的内容读取并控制台输出。

用例代码解析

  如上测试代码给同学们演示了如何使用 InputStreamReader 类从文件中读取文本数据。具体来说,测试用例实现步骤非常简单,首先创建了一个 FileInputStream 对象来打开文件,然后将该对象传递给 InputStreamReader 构造函数,以及用于指定文本编码的字符串 “UTF-8”。最后,它使用 BufferedReader 对象读取一行文本,然后关闭所有打开的流,这点一定是需要注意的,经常会被忽视。(该程序假定文本文件是 UTF-8 编码。)

不关IO流会当如何?

  针对该问题,我来给大家普及一下,若只使用IO流而不关闭流,会有如何影响,同学们请看:

  1. 浪费资源:打开的文件句柄或网络连接等资源不会被释放,会一直占用系统资源,导致系统资源的浪费。

  2. 内存泄漏:如果没有关闭流,内存中就会留下未释放的缓存,可能会导致内存泄漏。

  3. 数据丢失:如果没有关闭流或刷新缓存,部分数据可能不会被写入到文件或网络中,导致数据丢失。

  4. 程序异常:长时间未关闭流可能会导致程序异常或崩溃,尤其是在多线程程序中,需要确保及时关闭流来避免程序异常。

  因此,在Java中,使用完IO流后应该及时关闭流以释放资源、避免内存泄漏和数据丢失等问题。可以使用try-finally块或try-with-resources语句块来确保及时关闭流。

全文小结

  在本文中,我们依次介绍了InputStreamReader类的定义、作用、源代码解析、应用场景案例、优缺点分析、类代码方法介绍以及测试用例,希望可以帮助同学们更好的理解InputStreamReader类,以便于更快速的掌握它,吃透它。

总结

  InputStreamReader类是Java中的一个字符流类,用于将字节流转换为字符流。在Java的输入输出流处理中,是非常重要的一部分。在使用InputStreamReader类时,需要注意输入流和输出流的字符编码应该保持一致,否则会出现乱码的情况。

附录源码

  如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

☀️建议/推荐你


  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。

  最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。

  同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

📣关于我

  我是bug菌,CSDN | 掘金 | infoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1555374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

wordpress插件,免费的wordpress插件

WordPress作为世界上最受欢迎的内容管理系统之一,拥有庞大的插件生态系统,为用户提供了丰富的功能扩展。在内容创作和SEO优化方面,有一类特殊的插件是自动生成原创文章并自动发布到WordPress站点的工具。这些插件能够帮助用户节省时间和精力&…

WebAR开发简介

WebAR 开发使企业能够以独特且高度有趣的方式向客户和员工提供信息。 它提供增强现实 (AR) 内容,人们在智能手机上将其视为视觉叠加。 然而,WebAR 可在手机的普通网络浏览器上运行,无需下载任何应用程序。 WebAR 的多种用途包括帮助零售和在…

HEVC的Profile和Level介绍

文章目录 HEVCProfile(配置):Level(级别):划分标准 HEVC HEVC(High Efficiency Video Coding),也称为H.265,是一种视频压缩标准,旨在提供比先前的…

Game Audio Programming

音频编程时游戏开发中最容易忽略,学习资源又是很少的环节。接下来,你将和我探索人耳的工作机制。 what is sound? 我们可以解释电视机是如何通过眼睛传递视觉信息的,但却往往无法对听觉信息做出类似的解释。 对声音的科学研究被称为声学&…

PTA-练习10

目录 主串中查找子串 7-29 删除字符串中的子串 7-30 字符串的冒泡排序 主串中查找子串 查找子串在主穿的中出现的位置 函数strstr&#xff08;s1&#xff0c;s2&#xff09;&#xff0c;返回的是s2在s1中出现的位置指针 #include<stdio.h> #include<stdlib.h> #…

酷体体育科技加入飞桨技术伙伴计划,共同打造“AI随身教练”体育分析新模式...

近日&#xff0c;陕西酷体体育科技有限公司正式加入飞桨技术伙伴计划&#xff0c;双方将共同努力在AI体育技术分析领域&#xff0c;创新打造“AI体育”新模式&#xff0c;助力体育训练、康复、人才选拔数智化转型。通过大模型技术赋能体育&#xff0c;持续挖掘AI技术在体育领域…

vscode调试Unity

文章目录 vscode调试UnityC#环境需求开始调试 Lua添加Debugger环境配置联系.txt文件配置Java环境 添加调试代码断点不生效的问题 vscode调试Unity C# 现在使用vscode调试Unity的C#代码很简单&#xff0c;直接在vscode的EXTENSIONS里面搜索“Unity”&#xff0c;第一个就是&am…

【Vue3源码学习】— CH2.5 reactiveEffect.ts:Vue 3响应式系统的核心

reactiveEffect.ts&#xff1a;Vue 3响应式系统的核心 1. 什么是 reactiveEffect&#xff1f;2. 核心机制2.1 依赖收集&#xff08;Track&#xff09;2.2 触发更新&#xff08;Trigger&#xff09;2.3 效果范围&#xff08;effectScope&#xff09; 3. 源码解析 —— track3.1 …

ElasticSearch学习篇11_ANNS之基于图的NSW、HNSW算法

前言 往期博客ElasticSearch学习篇9_文本相似度计算方法现状以及基于改进的 Jaccard 算法代码实现与效果测评_elasticsearch 文字相似度实现方法-CSDN博客 根据论文对文本相似搜索现状做了一个简要总结&#xff0c;然后对论文提到的改进杰卡德算法做了实现&#xff0c;并结合业…

39.基于SpringBoot + Vue实现的前后端分离-无人智慧超市管理系统(项目 + 论文PPT)

项目介绍 随着互联网时代的发展&#xff0c;传统的线下管理技术已无法高效、便捷的管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;国家在环境要求不断提高的前提下&#xff0c;无人智慧超市管理系统建设也逐渐进入了信…

如果有效的编写 ChatGPT 提示?

1. 明确目标&#xff1a;确定使用 ChatGPT 的目的。无论是创意写作、产生想法还是查找信息&#xff0c;知道你想要什么可以让你更有效地使用这个工具。 2. 具体说明&#xff1a;你的提示越具体&#xff0c;ChatGPT 就越能理解你的需求。例如&#xff0c;你可以要求 ChatGPT…

网络编程基本概念(一篇文章掌握基本内容的详细概念,IP,端口号,协议,协议分层,封装和分用,客户端和服务端,请求和回应,两台主机的通信)

IP地址 概念 IP地址主要⽤于标识⽹络主机、其他⽹络设备&#xff08;如路由器&#xff09;的⽹络地址。简单说&#xff0c;IP地址⽤于定位主机的⽹络地址。 就像我们发送快递⼀样&#xff0c;需要知道对⽅的收货地址&#xff0c;快递员才能将包裹送到⽬的地。 IP的格式 IP地址…

Python环境下基于小波变换和机器学习的地震信号处理和识别

天然地震是由地球板块之间的碰撞或挤压引起的自然现象&#xff0c;这种碰撞或挤压导致板块边缘位移和板块内部破裂。非天然地震是指由人类活动引起的地面震动活动&#xff0c;比如矿震、核试验以及人工爆破等。随着社会经济的不断发展&#xff0c;人工爆破在生产生活中得到了广…

OSX-02-Mac OS应用开发系列课程大纲和章节内容设计

本节笔者会详细介绍下本系统专题的大纲&#xff0c;以及每个专题章节的组织结构。这样读者会有一个全局的概念。 在开始前还是在再介绍一下下面这个框架图&#xff0c;因为比较重要&#xff0c;在这里再冗余介绍一下。开发Apple公司相关产品的软件时&#xff0c;主要有两个框架…

【Canvas与艺术】五角星光芒四射的效果展示

【关键点】 三一渐变式光芒的实现。 【效果】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>光芒四射</title><st…

网络安全新视角:数据可视化的力量

在当今数字化时代&#xff0c;网络安全已成为各大企业乃至国家安全的重要组成部分。随着网络攻击的日益复杂和隐蔽&#xff0c;传统的网络安全防护措施已难以满足需求&#xff0c;急需新型的解决方案以增强网络防护能力。数据可视化技术&#xff0c;作为一种将复杂数据转换为图…

IDEA报错:java.nio.charset.MalformedInputException: Input length = 1

今天启动Springboot项目的时候报错&#xff1a; 一、问题 java.nio.charset.MalformedInputException: Input length 1和Input length 2 二、原因 是因为你的配置文件里面有中文或者是你的编码格式不正确导致 三、解决方案 解决方案一&#xff1a; 改变你的编码格式改为UT…

JAVA8 新特性StreamAPI使用

一、使用StreamAPI&#xff0c;操作两个队伍中名字&#xff0c;需求如下&#xff1a; 1、第一个队伍名字为3个字的成员姓名 2、第一个队伍筛选名字为3个字之后的前三个成员 3、第二个队伍筛选姓张的成员 4、第二个队伍筛选姓张的之后跳过前两个成员 5、将两个队伍合并成一个队伍…

利用HIVE的窗口函数进行SQL查询中出现的问题记录

student_info部分数据 score_info部分数据 course_info 1、问题复现 --完整SQL selectsti.stu_id,sti.stu_name,concat_ws(",",collect_set(ci.course_name)) over(partition by sti.stu_id) fromstudent_info sti left joinscore_info sci onsti.stu_idsci.stu_id l…

标题:基于uQRCode的Vue前端二维码生成组件技术探究

摘要&#xff1a;随着移动互联网的普及&#xff0c;二维码作为信息传递的媒介在各类应用中得到了广泛使用。前端开发中&#xff0c;二维码生成功能已成为一个常见的需求。本文将深入探讨如何使用uQRCode库在Vue前端框架中封装一个二维码生成组件&#xff0c;该组件可适用于所有…