相关疑难解决方法(0)

为什么使用BufferedInputStream比使用FileInputStream更快地逐字节读取文件?

我试图通过使用FileInputStream将文件读入数组,并且~800KB文件花了大约3秒来读入内存.然后我尝试了相同的代码,除了将FileInputStream包装到BufferedInputStream中,它花了大约76毫秒.为什么使用BufferedInputStream以字节逐字节读取文件,即使我仍在逐字节读取它?这是代码(代码的其余部分完全不相关).请注意,这是"快速"代码.如果你想要"慢"代码,你可以删除BufferedInputStream:

InputStream is = null;

    try {
        is = new BufferedInputStream(new FileInputStream(file));

        int[] fileArr = new int[(int) file.length()];

        for (int i = 0, temp = 0; (temp = is.read()) != -1; i++) {
            fileArr[i] = temp;
        }
Run Code Online (Sandbox Code Playgroud)

BufferedInputStream的速度提高了30多倍.远不止于此.那么,为什么会这样,并且可以使这个代码更有效(不使用任何外部库)?

java file-io inputstream fileinputstream

60
推荐指数
1
解决办法
5万
查看次数

BufferedInputStream的用法

让我在这篇文章前面加上一点谨慎.在Java方面,我是一个初学者.我已经开启和关闭了PHP一段时间,但我已经准备好制作一个桌面应用程序,所以我决定使用Java,原因有很多.

我正在处理的应用程序处于开始阶段(少于5个类),我需要从本地文件中读取字节.通常,文件目前小于512kB(但将来可能会变大).目前,我使用a FileInputStream将文件读入三个字节数组,完全满足我的要求.但是,我已经看到了一个BufferedInputStream提到的,并且想知道我目前这样做的方式是最好的,还是我应该使用一个BufferedInputStream.

我做了一些研究,并在Stack Overflow上阅读了一些问题,但是我仍然遇到麻烦,了解何时使用而不使用的最佳情况BufferedInputStream.在我的情况下,我读取字节的第一个数组只有几个字节(小于20).如果我收到的数据在这些字节中是好的,那么我将文件的其余部分读入另外两个不同大小的字节数组.

我也听过很多人提到分析,看看哪个在每个特定情况下哪个更有效,但是,我没有剖析经验,我不确定从哪里开始.我也会喜欢这方面的一些建议.

对于这么长的帖子我很抱歉,但我真的想学习并理解做这些事情的最佳方法.我总是习惯于第二次猜测我的决定,所以我会喜欢一些反馈.谢谢!

java bufferedinputstream fileinputstream

35
推荐指数
2
解决办法
2万
查看次数

在创建FileInputStream对象时使用InputStream而不是FileInputStream有什么区别

这可能是一个愚蠢的,但我想知道背景操作的差异.

  1. InputStream is = new FileInputStream(filepath);
  2. FileInputStream is = new FileInputStream(filepath);

上面两行代码之间的区别是什么,以及它们使用的场景.

java inputstream file fileinputstream java-io

17
推荐指数
2
解决办法
2万
查看次数