11.18

  1. Java 中,直接缓冲区与非直接缓冲器有什么区别?
    非直接缓冲区:通过allocate()分配缓冲区,将缓冲区建立在JVM的内存中
    直接缓冲区:通过allocateDirect()分配直接缓冲区,将缓冲区建立在物理内存中,可以提高效率。
    BufferedOutputStream与任何一个OutputStream相同,除了用一个另外的flush( ) 方法来保证数据缓冲器被写入到实际的输出设备。因为BufferedOutputStream是通过减小系统写数据的时间而提高性能的,可以调用flush( )方法生成缓冲器中待写的数据。
  2. Java 中的内存映射缓存区是什么?
    1.内存映射文件 I/O 是一种读和写文件数据的方法,它可以比常规的基于流或者基于通道的 I/O 快得多。
    2.内存映射文件 I/O 是通过使文件中的数据神奇般地出现为内存数组的内容来完成的。
    3.内存映射并不真的神奇或者多么不寻常。现代操作系统一般根据需要将文件的部分映射为内存的部分,从而实现文件系统.
    4.内存映射机制不过是在底层操作系统中可以采用这种机制时,提供了对该机制的访问。 尽管创建内存映射文件相当简单,但是向它写入可能是危险的。仅只是改变数组的单个元素这样的简单操作,就可能会直接修改磁盘上的文件。修改数据与将数据保存到磁盘是没有分开的。
    5.将一个FileChannel映射到内存中,将使用 FileChannel.map() 方法。
    map() 方法返回一个 MappedByteBuffer,它是 ByteBuffer 的子类。可以像使用其他任何 ByteBuffer 一样使用新映射的缓冲区,操作系统会在需要时负责执行映射。

你可能感兴趣的:(11.18)