BufferedInputStream和java.nio.Buffer之间的区别是什么?

时间:2016-09-10 02:46:58

标签: java buffer nio iostream fileinputstream

我们可以通过装饰BufferedInputStream获得FileInputStream。来自FileInputStream.getChannel的频道也可以将内容读入Buffer

那么,BufferedInputStreamjava.nio.Buffer之间的区别是什么?即,何时应使用BufferedInputStream,何时应使用java.nio.Bufferjava.nio.Channel

3 个答案:

答案 0 :(得分:1)

Getting started with new I/O (NIO),文章摘录:

  

面向流的I / O系统一次处理一个字节的数据。一个   输入流产生一个字节的数据,并且输出流消耗   一个字节的数据。 为流数据创建过滤器非常容易。   将几个过滤器链接在一起也是相对简单的   每个人都做出了相当于单一,复杂的事情   处理机制。另一方面,面向流的I / O通常是   相当慢

     

面向块的I / O系统处理块中的数据。每次操作   一步生成或使用一块数据。 处理数据   块可以比通过(流式传输)处理它更快   字节。但面向块的I / O缺乏一些优雅和简洁   面向流的I / O

答案 1 :(得分:0)

这些类在不同的时间针对不同的包编写。

如果您正在使用java.io包中的类,请使用BufferedInputStream。

如果您使用的是java.nio,请使用ByteBuffer。

如果没有使用,你可以使用普通字节[]。 ByteBuffer有一些有用的方法来处理原语,所以你可以使用它。

不太可能出现任何混淆,因为一般情况下,只有在必要时才使用一个,在这种情况下只有一个会在你编译时编译。

答案 2 :(得分:0)

我认为我们使用 BufferedInputStream 来包装 InputStream 以使其像面向块一样工作。但是当处理太多数据时,它实际上比真正的面向块的 I/O (Channel) 消耗更多的时间,但仍然比 unwrapperd InputStream 快。