java io流如何读取文件效率高

看了好多人在使用流时定义一个1024字节数组如果读取字节数不够1024貌似有时会又乱码,我记得inputstream有个方法available()可以直接指定长度但是我又... 看了好多人在使用流时 定义一个1024字节数组 如果读取字节数不够1024貌似有时会又乱码,我记得inputstream有个方法 available() 可以直接指定长度 但是我又担心一口气定义的数组长度太长会不会影响性能,求教育,谢谢 展开
 我来答
优广
2013-03-24 · 超过15用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:34.6万
展开全部
你在类的使用上不太恰当。

如果你想读取文本内容,你应该使用InputStreamReader这个类,使用这个类并且指定文本内容的字符集,就可以读出正确的内容。

InputStream这个类是用来读取二进制字节的,比如做文件复制的时候,应该是用InputStream这个类。

不管是InputStreamReader还是InputStream,都可以声明临时缓冲数组,不同的是InputStreamReader声明的数组是:char[] cs = new char[1024]

而InputStream声明的数组是:byte[] bs = new byte[1024]
samismiling
2015-07-07 · 知道合伙人软件行家
samismiling
知道合伙人软件行家
采纳数:1340 获赞数:5602

向TA提问 私信TA
展开全部
java提供了搞笑读取文件的方式:文件流,下面以FileInputStream和Apache Commons IO流两种读取方式来详细讲解:

以下两种代码均是读取一个大约1G的文件:

1、文件流
FileInputStream inputStream = null;
Scanner sc = null;
try {
inputStream = new FileInputStream(path);
sc = new Scanner(inputStream, "UTF-8");
while (sc.hasNextLine()) {
String line = sc.nextLine();
// System.out.println(line);
}
// note that Scanner suppresses exceptions
if (sc.ioException() != null) {
throw sc.ioException();
}
} finally {
if (inputStream != null) {
inputStream.close();
}
if (sc != null) {
sc.close();
}
}
这种方案将会遍历文件中的所有行——允许对每一行进行处理,而不保持对它的引用。总之没有把它们存放在内存中:(大约消耗了150MB内存)

2、Apache Commons IO流
同样也可以使用Commons IO库实现,利用该库提供的自定义LineIterator:
LineIterator it = FileUtils.lineIterator(theFile, "UTF-8");
try {
while (it.hasNext()) {
String line = it.nextLine();
// do something with line
}
} finally {
LineIterator.closeQuietly(it);
}
由于整个文件不是全部存放在内存中,这也就导致相当保守的内存消耗:(大约消耗了150MB内存)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天平WQQWGWGWQQ
2013-03-24
知道答主
回答量:36
采纳率:0%
帮助的人:7.7万
展开全部
慢看、。。。要有耐心
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式