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

标签 java io buffer

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

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。

那么我错过了什么?

  • 为什么缓冲区大小的变化对执行时间没有影响?
  • 为什么 BufferedInputStream 和 FileInputStream 的执行时间相同?

最佳答案

减慢你速度的是打印 - System.out.println(a); - 你总是在屏幕上打印 2470 万个字符。尝试将文件复制到另一个位置 - 使用不同的缓冲区大小读取它,然后再次将其写入新文件。

关于java - 为什么缓冲区大小对此文件读取操作没有影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31228966/

相关文章:

java - 尝试写入文件夹时出现 "java.nio.file.AccessDeniedException"

file - Go connection.Writer 和 reader 行为不正常,在一次读取操作中读取 2 写入

java - 在 jar 中加载资源文件

创建缓冲区并用随机数填充它

java - 如何将struts.xml中定义的Struts2 Action设置为PortletURL

java - 如何使用 xsl FO 在 pdf 中打印数组

buffer - 从函数插入文本到当前缓冲区

c++ - std::ostringstream 缓冲区的最大大小是多少?

java - 企业 Java 实体应该是愚蠢的吗?

java - onCompleted 方法