Funny things of nio
- FileChannel常用API详解,包括FileChannel.open方法获取通道
- ByteBuffer缓冲区的三种创建方式与解读---重点区分直接和非直接缓冲区
- Java IO流之DataInputStream和DataOutputStream分析
- 扫描流(Scanner)
- Runtime.getRuntime().exec踩坑总结(/bin/sh -c、异常流重定向)
FileChannel常用API详解,包括FileChannel.open方法获取通道
FileChannel.open()的方式
FileChannel channell = FileChannel.open(Paths.get("a.txt","c.txt"), StandardOpenOption.CREATE,StandardOpenOption.WRITE);
FileChannel channel2 = FileChannel.open(new File("a.txt").toPath(), StandardOpenOption.CREATE_NEW,StandardOpenOption.WRITE,StandardOpenOption.READ);
path获取
- Paths.get()
- new File(“a.txt”).toPath()
OpenOption接口的实现类通常由StandardOpenOption枚举进行代替。
public enum StandardOpenOption implements OpenOption {
READ,
WRITE,
APPEND,//累加
TRUNCATE_EXISTING,//如果该文件已存在并且为写入访问而打开,则其长度将被截断为0。如果只为读取访问打开文件,则忽略此选项。
CREATE,//不能单独使用,要与WRITE配套使用,单独使用会报错java.nio.file.NoSuchFileException,如果文件已存在,重复创建不会报错
CREATE_NEW,//不能单独使用,要与WRITE配套使用,如果文件已存在,则出现异常java.nio.file.FileAlreadyExistsException
DELETE_ON_CLOSE,
SPARSE,//稀疏文件,空闲位置不占内存(不要使用CREATE来创建稀疏文件)
SYNC,//要求对文件内容或元数据的每次更新都同步写入底层存储设备。如果这样做,程序运行的效率就降低了。
DSYNC;//要求对文件内容的每次更新都同步写入底层存储设备。
//枚举常量SYNC与DSYNC的区别:SYNC更新内容与元数据,而DSYNC只更新内容,与force(boolean)方法作用一样。
}
FileChannel(API详解)
ByteBuffer缓冲区的三种创建方式与解读—重点区分直接和非直接缓冲区
直接缓冲区和非直接缓冲区的比较:
直接缓冲区:
- 直接缓冲区在内部使用sun.misc.Unsafe类进行值的处理。Unsafe类的作用是JVM与操作系统进行直接通信。
- 直接缓冲区操作的数据不在JVM堆中,而是在内核空间中,这样提高运行效率。
- 通过allacateDirect()返回的缓冲区进行内存的分配和释放所需的时间成本通常要高于非直接缓冲区,但运行效率远比非直接高。
非直接缓冲区:
- 在内部直接对数组进行操作,并且是在JVM的堆中进行数组处理。
- 直接缓冲区提高运行效率的原理是每次调用基于操作系统的I/O操作之前或之后,JVM都会尽量避免将缓冲区的内容复制到中间缓冲区,或者从中间缓冲区中获取内容,这样就节省了一个步骤。
ByteBuffer缓冲区的三种创建方式与解读
Java IO流之DataInputStream和DataOutputStream分析
Java IO流之DataInputStream和DataOutputStream分析
扫描流(Scanner)
扫描流(Scanner)
Runtime.getRuntime().exec踩坑总结(/bin/sh -c、异常流重定向)
Runtime.getRuntime().exec踩坑总结(/bin/sh -c、异常流重定向)