InputStreamReader 和FileReader的区别及InputStream和Reader的区别

关于InputStreamReader和FileReader的区别,以及InputStream和Reader的区别,我们需要从数据输入、数据输出两个方面来讲解。

InputStreamReader 和 FileReader 的区别

InputStreamReader和FileReader都是读取字符流的类,主要区别在于它们输入的数据源不同。

InputStreamReader

InputStreamReader是字节流通向字符流的桥梁。用于将InputStream字节流转换成Reader字符流。它的构造方法如下:

InputStreamReader(InputStream in) throws UnsupportedEncodingException
InputStreamReader(InputStream in, Charset charset)
InputStreamReader(InputStream in, CharsetDecoder dec)

其中,第一个构造方法将InputStream转化为默认字符集的InputStreamReader,第二个构造方法将InputStream转化为指定字符集的InputStreamReader,第三个构造方法将InputStream转化为指定解码器的InputStreamReader。该类主要用于处理字节流数据,并将其转换为字符流,以便于我们进行处理。

FileReader

FileReader是一个可以用于读取字符流的类,主要用于读取文本文件中的数据。如果需要读取的数据是文本文件,并且编码方式不需要转换,那么FileReader是非常适合的。它的构造方法如下:

FileReader(File file)
FileReader(String fileName)

其中,第一个构造方法针对File对象进行构造;第二个构造方法针对文件路径名进行构造。该类主要用于读取字符流数据。

InputStream 和 Reader 的区别

InputStream和Reader都是用于读取数据的抽象类,主要区别在于它们读入的数据类型不同。

InputStream

InputStream是一个抽象类,是所有字节输入流的超类。它可以用于读取二进制数据(例如图像、视频等)。它的一些常用的方法有:

// 读取单个字节并返回
int read() throws IOException;

// 从输入流中将 b.length 个字节读入一个字节数组中,并返回实际读入的字节数量
int read(byte[] b) throws IOException;

// 从输入流中将最多 len 个字节读入一个字节数组中,返回实际读入的字节数量
int read(byte[] b, int off, int len) throws IOException;

// 跳过 n 个字节不读取,返回已经实际跳过的字节数
long skip(long n) throws IOException;

// 返回可以从输入流中读取的字节数
int available() throws IOException;

// 关闭此输入流并释放与该流关联的所有系统资源
void close() throws IOException;

Reader

Reader是一个抽象类,是所有字符输入流的超类。它可以用于读取文本数据。它的一些常用的方法有:

//读取单个字符,并返回int类型。其中int类型对应的是字符的UNICODE码值。
int read() throws IOException;

//从输入流中将 b.length 个字符读入一个字符数组中,返回实际读入的字符数
int read(char[] b) throws IOException;

//从输入流中将字符读入字符数组 c 中。cbuf - 目标字符缓冲区;off - 开始存储字符的偏移量;len - 要读取的最大字符数
int read(char[] cbuf, int off, int len) throws IOException;

//在行中读取文本,并返回一个包含该行内容的字符串,包含行的终止符,如果到达流的末端,则返回null
String readLine() throws IOException;

// 跳过 n 个字符不读取,返回已实际跳过的字符数
long skip(long n) throws IOException;

// 返回可以从输入流中读取的字符数
int available() throws IOException;

// 关闭此输入流并释放与该流关联的所有系统资源
void close() throws IOException;

示例代码

示例1:使用InputStreamReader读取网页内容并输出

import java.io.*;
import java.net.*;

public class InputStreamReaderDemo {
    public static void main(String[] args) throws Exception {
        URL url = new URL("https://www.baidu.com");
        InputStream is = url.openStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
        br.close();
        isr.close();
        is.close();
    }
}

示例2:使用FileReader读取本地文件并输出

import java.io.*;

public class FileReaderDemo {
    public static void main(String[] args) throws Exception {
        File file = new File("test.txt");
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
        br.close();
        fr.close();
    }
}

以上就是InputStreamReader和FileReader的区别,以及InputStream和Reader的区别的攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:InputStreamReader 和FileReader的区别及InputStream和Reader的区别 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • java实现省市区转换成树形结构

    下面是详细的Java实现省市区转换成树形结构的攻略,包括过程和示例说明。 1. 收集省市区数据 首先需要收集省市区的原始数据,可以从各种数据源中获取,如官方提供的数据文件、API接口等。为方便操作,最好将数据保存到数据库中,并设计好相应的数据表结构,以便后续处理和查询。 下面是一个示例的省市区表结构: CREATE TABLE `area` ( `id` i…

    Java 2023年5月26日
    00
  • 微信小程序(十六)form组件详细介绍

    让我来为你详细讲解“微信小程序(十六)form组件详细介绍”的完整攻略。 什么是form组件 在小程序中,form组件是一种用于提交表单数据的组件。form组件可以包含input、textarea、button等表单元素。每个表单元素都有一个name属性和一个value属性,表单元素的数据可以在提交时一并提交到服务器端。 form组件的使用方法 form组件…

    Java 2023年5月23日
    00
  • 教你如何写springboot接口

    教你如何写Spring Boot接口攻略 1. 确定项目需求和数据库设计 在编写Spring Boot接口前,需要先明确项目需求和数据库设计,包括接口需要实现哪些功能,数据表的关系等。这样才能确保编写出的接口满足项目需求。同时,我们还需要确定使用的数据库类型和数据库连接方式。 2. 创建Spring Boot项目 接下来我们需要使用Spring Initia…

    Java 2023年5月19日
    00
  • java生成自增编号数字的问题

    生成自增编号是Java应用程序开发中经常出现的需求,可以为数据库中的表设置自增主键,也可以为业务中不同种类的数据生成不同的编号。本篇攻略将介绍如何使用Java来实现自增编号。 方案一:使用数据库的自增主键 数据库中可以设置自增主键,通过以下步骤实现: 在数据库中创建自增主键 CREATE TABLE user ( id INT PRIMARY KEY AUT…

    Java 2023年5月20日
    00
  • 基于JSON实现传输byte数组过程解析

    首先,我们需要明确一下,JSON是一种轻量级的数据交换格式,它使用文本格式,以键值对的形式存储数据。而byte数组是将二进制数据以字节形式存储在内存中,传输byte数组需要将其转换为二进制格式进行传输。 在使用JSON传输byte数组之前,需要将byte数组转换为Base64编码格式,这样才能够将其以字符串形式嵌入JSON对象中。以下是基于JSON实现传输b…

    Java 2023年5月26日
    00
  • SpringMVC开发restful API之用户查询代码详解

    下面我将详细讲解“SpringMVC开发restful API之用户查询代码详解”的完整攻略: 简介 本攻略旨在讲解如何使用SpringMVC框架开发restful API进行用户查询操作。通过本攻略,读者将能够掌握SpringMVC框架开发restful API的基本流程,并了解如何进行用户查询操作。本攻略适合Java开发者学习使用。 准备工作 在开始本攻…

    Java 2023年5月26日
    00
  • 详解Java生成PDF文档方法

    详解Java生成PDF文档方法 介绍 在Java中,我们可以使用各种工具库来生成PDF文档。本文将详细讲解如何使用iText和PDFBox库来生成PDF文档。 iText库 iText是一款Java库,可以用来创建和操作PDF文档。它提供了许多方法和类来生成、操作和处理PDF内容。以下是一个简单的示例。 首先,需要引入iText库的maven依赖。 <…

    Java 2023年5月19日
    00
  • Java集合ArrayList与LinkedList详解

    Java集合ArrayList与LinkedList详解 概述 Java集合分为两大类:Collection和Map。其中Collection又可以分为List、Set和Queue三种。 ArrayList和LinkedList是List接口的两种实现类,它们都可以存储按顺序排列的元素,但是它们之间有一些区别。本文将从以下几个方面详细讲解ArrayList和…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部