关于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技术站