BufferedInputStream是套在某个其他的InputStream外,起着缓存的功能,用来改善里面那个InputStream的性能(如果可能的话),它自己不能脱离里面那个单独存在。FileInputStream是读取一个文件来作InputStream。所以你可以把BufferedInputStream套在FileInputStream外,来改善FileInputStream的性能。
FileInputStream与BufferedInputStream区别:
FileInputStream是字节流,BufferedInputStream是字节缓冲流,使用BufferedInputStream读资源比FileInputStream读取资源的效率高(BufferedInputStream的read方法会读取尽可能多的字节),且FileInputStream对象的read方法会出现阻塞;
FileInputStream与FileReader区别:
FileInputStream是字节流,FileReader是字符流,用字节流读取中文的时候,可能会出现乱码,而用字符流则不会出现乱码,而且用字符流读取的速度比字节流要快;
ObjectOutputStream与ByteArrayOutputStream的区别:
ObjectOutputStream可以将java对象写入outputstream流中(序列化),然后进行持久化,此对象必须是实现了java.io.Serializable 接口;
ByteArrayOutputStream是将数据写入byte数组中;
了解“堵塞”的意思吧!
假设一个文件的长度是100个字节,要将之读取到内存中,再假设您每次只读取10个字节,那么读完整个文件是不是读取10次的呀?
假设老板让你完成100件事情,老板说,你每天只完成10件就可以了,难道你非得等到第十天才完成第100件事情吗?有一天您在中午下班前就完成了10件事情,下午您不妨多干一点,那么也许在第9天的时候就完成了100件事情。
同理,BufferedInputStream有可能会读取比您规定的更多的东西到内存,以减少访问IO的次数,
总之您要记住一句话,访问IO的次数越少,性能就越高,原因就在于CPU和内存的速度》》》》远大于硬盘或其他外部设备的速度。
换一个不太恰当的例子来说,您和您的朋友一起去登山,你朋友太不给力了,走一会儿就要休息,而您呢,您的体力比他要好的多,根本不需要休息,所以每当他休息的时候,您得等着他,您那时候什么也干不了,这就叫堵塞,堵塞就是说您有能力干某事,但是迫于某种原因您什么也干不了,只能干等。所以您朋友休息的次数越少,你们两个到达山顶所花费的时间就越少。CPU访问硬盘的次数越少,程序就越快。BufferedInputStream在小型文件中的性能优势无法体现出来,假设您将以个2G大小的文件从D盘完全复制到E盘,性能之优势便展露无疑!
首先 谢谢您耐心的讲解。让我更深刻的了解了阻塞的概念。 但是我想了解的是,您说的这个BufferedInputStream在大型文件中的应用。如何应用。能不能以代码的形式 举个例子? 我想看看如何将2G大小的文件从D盘完全复制到E盘的 这种代码。 不知道能否给与帮助 谢谢
import java.io.*; public class SS { public static void main(String[] args) throws Exception { File f = new File("d:\\大型数据库文件.mdf"); FileInputStream fis = new FileInputStream(f); //如果下面的语句使用BufferedOutputStream来修饰则带来更好的性能现。 FileOutputStream fos = new FileOutputStream("e:\\" + f.getName()); int length = 0; byte[] b = new byte[1024]; while((length = fis.read(b)) != -1) { fos.write(b, 0, length); } fos.close(); fis.close(); } }
相关推荐
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream); //创建播放器对象,把文件的缓冲流传入进去 player = new Player(bufferedInputStream); ...
这样的设计允许BufferedInputStream直接与任何InputStream类型的对象配合使用,比如FileInputStream、JarInputStream等。通过这种方式,用户可以在不改变原有数据源的情况下,获得更好的性能。 在实际的性能测试中...
play方法使用BufferedInputStream和FileInputStream类来读取mp3文件,并使用JLayer库的Player类来播放mp3文件。 使用BufferedInputStream和FileInputStream 在play方法中,使用BufferedInputStream和...
这里的BufferedInputStream就是对FileInputStream的一个装饰,使得FileInputStream在运行时获得了缓冲功能,而不需要在编译时就确定所有可能的组合,极大地提高了代码的可扩展性和灵活性。 Decorator模式的基本结构...
`FileInputStream`和`FileOutputStream`是Java.io包下的核心类,它们分别代表了文件输入流和文件输出流。这两个类用于对文件进行字节级别的读写操作,适用于处理任何类型的二进制数据,如图片、音频、视频文件等。 ...
Java中的`FileInputStream`和`FileOutputStream`是用于处理文件输入和输出操作的基本类,它们分别继承自`InputStream`和`OutputStream`。这两个类在Java I/O系统中扮演着核心角色,提供了对文件进行字节级读写操作的...
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("input.txt")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("output.txt")); ``` 4. ObjectInputStream和...
在Java I/O流处理中,`BufferedOutputStream` 和 `BufferedInputStream` 是两种非常重要的类,它们分别属于字节缓冲输出流和字节缓冲输入流。这两个类都是为了提高I/O操作的效率,通过在实际操作底层流之前,先将...
在Java编程语言中,IO(Input/Output)流是处理数据输入和输出的关键部分,而FileInputStream和FileOutputStream是Java IO中的基础类,用于读写文件。为了提高效率,我们通常会结合BufferedInputStream和...
- 示例中首先创建了一个BufferedInputStream,关联了一个FileInputStream,用于读取名为"file.txt"的文件。 - 使用`read()`方法读取5个字节,并将它们转换为十六进制表示。 - 检查`markSupported()`,确认流支持...
Java IO 中的 File 类、输入流和输出流是处理输入输出操作的基本类和方法,BufferedOutputStream、BufferedInputStream、DataOutputStream 和 DataInputStream 等过滤流提供了带缓冲的读写和基本数据类型的读写功能...
使用BufferedInputStream字节流,以及StringBuiler技术实现字节的逐行读取。即字节流的readline功能。BufferedInputStream bufferedInputStream=new BufferedInputStream(new FileInputStream(file));
以Java IO中的FileInputStream和BufferedInputStream为例,假设我们有一个FileInputStream实例,如果我们想要添加缓冲功能,可以创建一个BufferedInputStream,将FileInputStream作为参数传递给BufferedInputStream...
例如,BufferedInputStream和BufferedOutputStream可以提高读写速度,GZIPOutputStream和GZIPInputStream用于进行GZIP压缩和解压缩。 在实际操作中,我们通常会使用组合流(Chaining Streams),即一个流连接到另一...
2. **缓冲区(BufferedInputStream和BufferedOutputStream)**:为了提高读写效率,通常会使用`BufferedInputStream`和`BufferedOutputStream`作为包装类,它们允许一次性处理多个字节。 3. **字节与16进制转换**:...
为了提高效率,通常我们会使用带有缓冲功能的类,如BufferedInputStream和BufferedOutputStream。 在文件操作中,File类是核心,它提供了创建、删除、重命名文件和检查文件属性的方法。例如,我们可以通过File类的...
这段代码首先创建了源文件和目标文件的`FileInputStream`和`FileOutputStream`对象,然后用`BufferedInputStream`和`BufferedOutputStream`包装它们。接着,我们使用一个字节数组作为缓冲区,每次从源文件读取数据,...
在Android中,我们主要关注的是与文件操作相关的类,如FileInputStream、FileOutputStream、BufferedInputStream和BufferedOutputStream等。 二、InputStream的使用 InputStream是所有字节输入流的抽象基类,提供...
FileInputStream和FileOutputStream BufferedInputStream 和 BufferedOutputStream DataInputStream 和 DataOutputStream ObjectInputStream和ObjectOutputStream PrintStream PushbackInputStream
Android提供了多种类型的流,包括FileInputStream和FileOutputStream,分别用于文件的读取和写入。例如,`FileInputStream fis = new FileInputStream(file);`创建一个文件输入流对象,`FileOutputStream fos = new ...