java nio 之MappedByteBuffer
其实掌握
MappedByteBuffer
并不难,只要记住“三方三法三特性”(我自己总结的,呵呵
~~
不要扔鸡蛋哦。。。)这句话就可以轻松搞定!
MappedByteBuffer
只是一种特殊的
ByteBuffer
,即是
ByteBuffer
的子类。
MappedByteBuffer
将文件直接映射到内存(这里的内存指的是虚拟内存,并不是物理内存,后面说证明这一点)。通常,可以映射整个文件,如果文件比较大的话可以分段进行映射,只要指定文件的那个部分就可以。而且,与
ByteBuffer
十分类似,没有构造函数(你不可
new MappedByteBuffer
()来构造一个
MappedByteBuffer
),我们可以通过
java.nio.channels.FileChannel
的
map()
方法来获取
MappedByteBuffer
。其实说的通俗一点就是
Map
把文件的内容被映像到计算机虚拟内存的一块区域,这样就可以直接操作内存当中的数据而无需操作的时候每次都通过
I/O
去物理硬盘读取文件,所以效率上有很大的提升!
三种方式:
FileChannel
提供了
map
方法来把文件影射为内存映像文件:
MappedByteBuffer map(int mode,long position,long size);
可以把文件的从
position
开始的
size
大小的区域映射为内存映像文件,
mode
指出了
可访问该内存映像文件的方式:
READ_ONLY,READ_WRITE,PRIVATE.
a. READ_ONLY,
(只读):
试图修改得到的缓冲区将导致抛出
ReadOnlyBufferException
.(MapMode.READ_ONLY
)
b. READ_WRITE
(读
/
写):
对得到的缓冲区的更改最终将传播到文件;该更改对映射到同一文件的其他程序不一定是可见的。
(
MapMode.READ_WRITE
)
c. PRIVATE
(专用):
对得到的缓冲区的更改不会传播到文件,并且该更改对映射到同一文件的其他程序也不是可见的;相反,会创建缓冲区已修改部分的专用副本。
(
MapMode.PRIVATE
)
三个方法:
a. fore();
缓冲区是
READ_WRITE
模式下,此方法对缓冲区内容的修改强行写入文件
b. load()
将缓冲区的内容载入内存,并返回该缓冲区的引用
c.
相关文档:
Java NIO API详解
在JDK
1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞(blocking)API。对于大多数应用来说,这样的API使用很方
便,然而,一些对性能要求较高的应用,尤其是服务端应用,往往需要一个更为有效的方式来处理IO。从JDK 1.4起,NIO
API作为一个基于缓冲区,并能提供非阻塞(non-blo ......
1、JAVA读取文件,避免中文乱码。
/**
* 读取文件内容
*
* @param filePathAndName
* String 如 c:\\1.txt 绝对路径
* @return boolean
*/
public static String readFile(String filePathAndName) {
String fileContent ......
1, 保证线程安全的三种方法: a, 不要跨线程访问共享变量b, 使共享变量是final类型的c, 将共享变量的操作加上同步
2, 一开始就将类设计成线程安全的, 比在后期重新修复它,更容易.
3, 编写多线程程序, 首先保证它是正确的, 其次再考虑性能.
4, 无 ......
说明:本文的适用对象为java初学者、如果有读者发现文章中有叙述不妥之处,请指正。
今天在论坛上有人提了一个关于java中调用函数时有没有引用传递的问题,可谓是吵的不可开交。有人说java只有值传递,也有人说java既有值传递也有引用传递,那么java中到底有没有引用传递呢,下面我来分析一下。
一、首先来明确一下"值传递" ......
构造方法:
String()
初始化一个新创建的 String 对象,它表示一个空字符序列。
String(byte[] bytes)
构造一个新的 String,方法是使用平台的默认字符集解码字节的指定数组。
String(byte ......