- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章InputStreamReader 和FileReader的区别及InputStream和Reader的区别由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
首先给大家介绍InputStreamReader 和FileReader的区别,具体内容如下所示:
InputStreamReader 和 BufferedReader 。其中最重要的类是 InputStreamReader ,它是字节转换为字符的桥梁。 你可以在构造器重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如 GBK 等.
FileReader 与 InputStreamReader 涉及编码转换 ( 指定编码方式或者采用 os 默认编码 ) ,可能在不同的平台上出现乱码现象!而 FileInputStream 以二进制方式处理,不会出现乱码现象 . 。
FileInputStream字节流是 以一个一个字节来读.
FileReader字符流是 以一个一个字符来读取的.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
BufferedReader bufReader =
null
;
InputStreamReader isr =
null
;
FileReader fr =
null
;
try
{
for
(String fileName:fileNames){
方法一:
isr =
new
InputStreamReader(
new
FileInputStream(
"D:\test.txt"
),
"utf-8"
);
bufReader =
new
BufferedReader(isr);
方法二:
fr =
new
FileReader(
"D:\test.txt"
);
bufReader =
new
BufferedReader(fr);
while
(bufReader.ready()) {
// 1. 得到每一行数据
String dataLine = bufReader.readLine();
}
}
|
InputStream和Reader的区别 。
java.io下面有两个抽象类:InputStream和Reader 。
InputStream是表示字节输入流的所有类的超类 。
Reader是用于读取字符流的抽象类 。
InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别.
即用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组.
弄清了两个超类的根本区别,再来看他们底下子类的使用,这里只对最常用的几个说明 。
InputStream | __FileInputStream 。
FileInputStream 从文件系统中的某个文件中获得输入字节.
构造方法摘要 。
FileInputStream (File file) 。
通过打开一个到实际文件的连接来创建一个 FileInputStream ,该文件通过文件系统中的 File 对象 file 指定.
FileInputStream (FileDescriptor fdObj) 。
通过使用文件描述符 fdObj 创建一个 FileInputStream ,该文件描述符表示到文件系统中某个实际文件的现有连接.
FileInputStream (String name) 。
通过打开一个到实际文件的连接来创建一个 FileInputStream ,该文件通过文件系统中的路径名 name 指定。 。
Reader 。
|——BufferedReader |___InputStreamReader |__FileReader 。
BufferedReader : 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取.
构造方法摘要 。
BufferedReader (Reader in) 。
创建一个使用默认大小输入缓冲区的缓冲字符输入流.
BufferedReader (Reader in, int sz) 。
创建一个使用指定大小输入缓冲区的缓冲字符输入流.
BufferedReader (Java Platform SE 6) 。
BufferedReader的最大特点就是缓冲区的设置。通常Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求,如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的.
使用BufferedReader可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了.
因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和InputStreamReader).
例如, 。
1
2
|
BufferedReader in
=
new
BufferedReader(
new
FileReader(
"foo.in"
));
|
将缓冲指定文件的输入.
1
|
InputStreamReader (Java Platform SE
6
)
|
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。 。
构造方法摘要 。
1
2
3
4
5
6
7
8
|
InputStreamReader (InputStream in)
创建一个使用默认字符集的 InputStreamReader。
InputStreamReader (InputStream in, Charset cs)
创建使用给定字符集的 InputStreamReader。
InputStreamReader (InputStream in, CharsetDecoder dec)
创建使用给定字符集解码器的 InputStreamReader。
InputStreamReader (InputStream in, String charsetName)
创建使用指定字符集的 InputStreamReader。
|
每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节.
为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:
1
|
BufferedReader in =
new
BufferedReader(
new
InputStreamReader(System.in));
|
InputStreamReader最大的特点是可以指转换的定编码格式,这是其他类所不能的,从构造方法就可看出,这一点在读取中文字符时非常有用 。
FileReader 。
1)FileReader类介绍:
InputStreamReader类的子类,所有方法(read()等)都从父类InputStreamReader中继承而来; 。
2)与InputStreamReader类的区别:
构造方法摘要 。
FileReader (File file) 。
在给定从中读取数据的 File 的情况下创建一个新 FileReader .
FileReader (FileDescriptor fd) 。
在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader .
FileReader (String fileName) 。
在给定从中读取数据的文件名的情况下创建一个新 FileReader 。
该类与它的父类InputStreamReader的主要不同在于构造函数,主要区别也就在于构造函数! 。
从InputStreamReader的构造函数中看到,参数为InputStream和编码方式,可以看出,当要指定编码方式时,必须使用InputStreamReader类;而FileReader构造函数的参数与FileInputStream同,为File对象或表示path的String,可以看出,当要根据File对象或者String读取一个文件时,用FileReader; 。
我想FileReader子类的作用也就在于这个小分工吧。该类与它的父类InputStreamReader的主要不同在于构造函数,主要区别也就在于构造函数! 。
从InputStreamReader 。
的构造函数中看到,参数为InputStream和编码方式,可以看出,当要指定编码方式时,必须使用InputStreamReader类;而FileReader构造函数的参数与FileInputStream同,为File对象或表示path的String,可以看出,当要根据File对象或者String读取一个文件时,用FileReader; 。
我想FileReader子类的作用也就在于这个小分工吧.
二 联系与区别 。
(1)字符与字节:
FileInputStream 类以二进制输入/输出,I/O速度快且效率搞,但是它的read()方法读到的是一个字节(二进制数据),很不利于人们阅读,而且无法直接对文件中的字符进行操作,比如替换,查找(必须以字节形式操作); 。
而Reader类弥补了这个缺陷,可以以文本格式输入/输出,非常方便;比如可以使用while((ch = filereader.read())!=-1 )循环来读取文件;可以使用BufferedReader的readLine()方法一行一行的读取文本.
(2)编码 。
InputStreamReader ,它是字节转换为字符的桥梁。 你可以在构造器重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如GBK等.
FileReader与InputStreamReader 涉及编码转换(指定编码方式或者采用os默认编码),可能在不同的平台上出现乱码现象!而FileInputStream 以二进制方式处理,不会出现乱码现象. 。
因此要指定编码方式时,必须使用InputStreamReader 类,所以说它是字节转换为字符的桥梁; 。
(3) 缓存区 。
BufferReader类用来包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和InputStreamReader).
(4)规范用法 。
总结以上内容,得出比较好的规范用法:
1) File file = new File ("hello.txt"),
1
|
FileInputStream in=
new
FileInputStream (file);
|
2) File file = new File ("hello.txt"),
1
2
3
|
FileInputStream in=
new
FileInputStream (file);
InputStreamReader inReader=
new
InputStreamReader (in,
"UTF-8"
);
BufferedReader bufReader=
new
BufferedReader(inReader);
|
3) File file = new File ("hello.txt"),
1
2
|
FileReader fileReader=
new
FileReader(file);
BufferedReader bufReader=
new
BufferedReader(fileReader);
|
最后此篇关于InputStreamReader 和FileReader的区别及InputStream和Reader的区别的文章就讲到这里了,如果你想了解更多关于InputStreamReader 和FileReader的区别及InputStream和Reader的区别的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
平时很少在jquery中用到this。查看代码时发现用到了,就调试出this的值,心想原来如此。还是挺有用的。这里总结一下this与$(this)的区别和使用。 $(this)生成的是什么?
使用单例类和应用程序范围的托管 bean 来保存应用程序数据有区别吗? 我需要查找某些 JNDI 资源,例如远程 bean 接口(interface),因此我为自己编写了一个单例来缓存我的引用并且只允
如果您仔细查看包含的图片,您会注意到您可以使用 Eclipse IDE 重构 Groovy 代码并将方法转换为闭包,反之亦然。那么,闭包到底是什么,它与方法有什么不同呢?有人可以举一个使用闭包的好例子
vagrant box repackage有什么区别( docs ) 和 vagrant package ( docs )? 我意识到 vagrant package仅适用于 VirtualBox 提
我想看看是否有人可以解释为什么以下代码适用于 valueOf 但不适用于其他代码。 import java.math.BigDecimal; public class Change { publ
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicates: What is Closures/Lambda in PHP or Javascript in layman te
This question already has answers here: Vagrant, Docker, Puppet, Chef (3个答案) 2年前关闭。 docker和chef有什么共同
以下代码在95%的机器上产生相同的输出,但是在几台机器上却有所不同。在 Debug模式下,输出: Changing from New to Fin OK 但在 Release模式下: Changing
////Creating Object var Obj; // init Object Obj= {}; 它们之间有什么区别两个? 有没有可能把它变成一个单行? 这样使用有什么好处吗?
我想找出定时器服务之间的区别。我应该使用哪个以及何时使用。我正在使用 Jboss 应用服务器。 1) java.ejb.Schedule。 @Schedule注解或配置自xml。 2) javax.e
我发现在 C++ 中可以通过三种不同的方式将对象传递给函数。假设我的类(class)是这样的: class Test { int i; public: Test(int x);
有什么区别。 public class Test { public static void main(String args[]) { String toBeCast = "c
如果我有一列,设置为主索引,设置为INT。 如果我不将其设置为自动递增,而只是将唯一的随机整数插入其中,与自动递增相比,这是否会减慢 future 的查询速度? 如果我在主索引和唯一索引为 INT 的
这两种日期格式有什么区别。第一个给出实际时间,第二个给出时间购买添加时区偏移值。 NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]
如果有一个函数,请说foo: function foo() { console.log('bar'); } 那么在 JavaScript 中,从另一个函数调用一个函数有什么区别,如下所示: f
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
代码是什么: class Time { private: int hours; int minutes; int seconds; pu
我知道这是非常基本的,但有人介意解释一下这两个数组声明之间的区别吗: #include array myints; ...和: int myints[5]; ...以及为什么 myints.size
我学会了如何根据 http://reference.sitepoint.com/css/specificity 计算 css 特异性但是,基于this reference,我不明白伪类(来自c)和伪元
为什么在运行 2) 时会出现额外的空行?对我来说 1 就像 2。那么为什么 2) 中的额外行? 1) export p1=$(cd $(dirname $0) && pwd) #
我是一名优秀的程序员,十分优秀!