当前位置: 首页 > 知识库问答 >
问题:

为什么缓冲区大小对文件读取操作没有影响

公孙鸿才
2023-03-14

我正在学习Java I/O。因此,使用缓冲流可以减少读取或写入所需的时间,因为如果使用普通的FileInputStream,每次调用读取时都会获取一个字节,但如果使用缓冲区,则会获取指定大小的数据并将其存储在内存中。所以我试着在实践中看到这一点。

package javaIO;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;

public class BufferTest {

    public static void main(String[] args) throws Exception{

        int starttime=(int) (System.currentTimeMillis()/1000);

        BufferedInputStream is=new BufferedInputStream(new FileInputStream("/home/anil/Downloads/Vidoes/batman.mp4"),65536);
//      InputStream is=new FileInputStream("/home/anil/Downloads/Vidoes/batman.mp4");
        int a=0;
        while((a=is.read())!=-1){

            System.out.println(a);
        }

        is.close();

        int endTime=(int) (System.currentTimeMillis()/1000);

        System.out.println("Took "+(endTime-starttime)+"seconds");
    }

}

我已将BufferedInputStream的缓冲区大小设置为512,8192,65536。每次需要87秒才能完成执行。所以我尝试使用FileInputStream,但仍然需要87秒才能完成执行。batman.mp4的大小为24.7mb。

那么我错过了什么?

  • 为什么缓冲区大小的更改对执行时间没有影响

共有1个答案

邓光赫
2023-03-14

让你慢下来的是打印系统。出来println(a) -您总是在屏幕上打印2470万字符。尝试将文件复制到其他位置-使用不同的缓冲区大小读取文件,然后再次将其写入新文件。

 类似资料:
  • 我读到FileWriter和BufferedWriter的区别在于FileWriter直接写入文件(逐字符),white BufferedReader使用缓冲区。如果是,为什么FileWriter有缓冲区?例如,如果我创建一个FileWriter对象,如下所示: 而且,如果我在程序结束时不刷新或关闭写入器,它将不会向文件写入任何内容。这意味着它也使用缓冲区。拜托,解释一下?

  • 最近,我创建了一个界面,强制用户实现单个,其默认方法如下所示: 不久之后,由于直接从读取单个字节,这非常昂贵(每MB数秒)。 将其包装在中解决了我的问题,但它给我留下了一个问题:为什么的价格如此昂贵。 文件通道在读取字节时不会关闭或打开,那么为什么首先需要缓冲区呢?

  • 我来这里是为了消除专家们对opengl的一些困惑。我感谢你的帮助! 顶点着色器代码看起来像 所以,这是我的理解。GLVertexAttributePointer的目的是定义顶点缓冲区对象中的数据格式。因此,在vbo中,它按如下方式存储数据 所以,我们有两条glVertex AttribPointer线,因为我们在顶点着色器中定义了两个变量。所以基本上我们定义了这两个变量指向什么。因此,第一个glV

  • 本文向大家介绍修改Android Studio 的 Logcat 缓冲区大小操作,包括了修改Android Studio 的 Logcat 缓冲区大小操作的使用技巧和注意事项,需要的朋友参考一下 找到 Android Studio的安装目录\bin\idea.properties 文件 将文件中的idea.cycle.buffer.size=1024 改成 例如: idea.cycle.buffe

  • 问题内容: 我知道Java和Perl都非常努力地在读取文件时找到一种适合所有默认缓冲区大小的大小,但是我发现他们的选择越来越过时,并且在更改默认选择时遇到问题Perl。 对于Perl,我认为默认情况下会使用8K缓冲区(类似于Java的选择),我无法使用perldoc网站搜索引擎(确实是Google)找到关于如何增加默认文件输入缓冲区大小的参考,例如, 64K。 通过上面的链接,显示8K缓冲区如何不

  • 问题内容: 该文件规定,对于缓冲的默认值是: 。我目前在Red Hat Linux 6上,但是我无法弄清楚为系统设置的默认缓冲。 谁能指导我如何确定系统的缓冲? 问题答案: 由于您链接到2.7文档,因此我假设您使用的是2.7。(在Python 3.x中,这一切都变得更加简单,因为在Python级别上公开了更多的缓冲。) 所有实际上做(在POSIX系统)是调用,然后,如果你已经通过了什么,。由于您没