我们可以通过装饰BufferedInputStream
获得FileInputStream
。来自FileInputStream.getChannel
的频道也可以将内容读入Buffer
。
那么,BufferedInputStream
和java.nio.Buffer
之间的区别是什么?即,何时应使用BufferedInputStream
,何时应使用java.nio.Buffer
和java.nio.Channel
?
答案 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
快。