为什么缓冲区大小对此文件读取操作没有影响
Why buffer size has no effect on this file read operation
我正在了解 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);
- 你总是在屏幕上打印 24.7M 个字符。尝试将文件复制到另一个位置 - 使用不同的缓冲区大小读取它并再次将其写入新文件。
我正在了解 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);
- 你总是在屏幕上打印 24.7M 个字符。尝试将文件复制到另一个位置 - 使用不同的缓冲区大小读取它并再次将其写入新文件。