Java NIO FileChannel
来源:互联网 发布:淘宝系统排查时间 编辑:程序博客网 时间:2024/06/05 20:48
A Java NIO FileChannel is a channel that is connected to a file. Using a file channel you can read data from a file, and write data to a file. The Java NIO FileChannel class is NIO's an alternative to reading files with the standard Java IO API.
A FileChannel
cannot be set into non-blocking mode. It always runs in blocking mode.
Opening a FileChannel
Before you can use a FileChannel
you must open it. You cannot open a FileChannel directly. You need to obtain a FileChannel via an InputStream, OutputStream, or a RandomAccessFile. Here is how you open a FileChannel via a RandomAccessFile:
RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");FileChannel inChannel = aFile.getChannel();
Reading Data from a FileChannel
To read data from a FileChannel
you call one of the read()
methods. Here is an example:
ByteBuffer buf = ByteBuffer.allocate(48);int bytesRead = inChannel.read(buf);
First a Buffer
is allocated. The data read from the FileChannel
is read into the Buffer
.
Second the FileChannel.read()
method is called. This method reads data from the FileChannel
into theBuffer
. The int
returned by the read()
method tells how many bytes were witten into the Buffer
. If -1 is returned, the end-of-file is reached.
Writing Data to a FileChannel
Writing data to a FileChannel
is done using the FileChannel.write()
method, which takes a Buffer
as parameter. Here is an example:
String newData = "New String to write to file..." + System.currentTimeMillis();ByteBuffer buf = ByteBuffer.allocate(48);buf.clear();buf.put(newData.getBytes());buf.flip();while(buf.hasRemaining()) { channel.write(buf);}
Notice how the FileChannel.write()
method is called inside a while-loop. There is no guarantee of how many bytes the write()
method writes to the FileChannel.
Therefore we repeat the write()
call until theBuffer
has no further bytes to write.
Closing a FileChannel
When you are done using a FileChannel
you must close it. Here is how that is done:
channel.close();
FileChannel Position
When reading or writing to a FileChannel
you do so at a specific position. You can obtain the current position of the FileChannel
object by calling the position()
method.
You can also set the position of the FileChannel
by calling the position(long pos)
method.
Here are two examples:
long pos channel.position();channel.position(pos +123);
If you set the position after the end of the file, and try to read from the channel, you will get -1 - the end-of-file marker.
If you set the position after the end of the file, and write to the channel, the file will be expanded to fit the position and written data. This may result in a "file hole", where the physical file on the disk has gaps in the written data.
FileChannel Size
The size()
method of the FileChannel
object returns the file size of the file the channel is connected to. Here is a simple example:
long fileSize = channel.size();
FileChannel Truncate
You can truncate a file by calling the FileChannel.truncate()
method. When you truncate a file, you cut it off at a given length. Here is an example:
channel.truncate(1024);
This example truncates the file at 1024 bytes in length.
FileChannel Force
The FileChannel.force()
method flushes all unwritten data from the channel to the disk. An operating system may cache data in memory for performance reasons, so you are not guaranteed that data written to the channel is actually written to disk, until you call the force()
method.
The force()
method takes a boolean as parameter, telling whether the file meta data (permission etc.) should be flushed too.
Here is an example which flushes both data and meta data:
channel.force(true);
- Java NIO FileChannel
- JAVA NIO之FileChannel
- Java NIO(8-FileChannel)
- Java nio 之 FileChannel
- Java NIO FileChannel
- Java NIO FileChannel
- java nio(二)FileChannel
- Java NIO -- FileChannel
- Java NIO (七) FileChannel
- Java NIO FileChannel
- Java NIO FileChannel
- java nio 之FileChannel
- Java NIO FileChannel
- Java NIO(四)--FileChannel
- java NIO 之fileChannel
- java NIO教程(七)--FileChannel
- Java NIO 学习(三)--FileChannel
- Java的NIO之FileChannel
- 第五章-程序设计基本概念(2)
- Linux常用网络命令和关机重启命令
- 定时器扫描修改时锁表问题
- android 使用html5作布局文件
- 数组中的逆序对
- Java NIO FileChannel
- Qzone React Native改造
- 提高 Linux 上 socket 性能
- SVN无法更新代码的错误:Error:svn:E155004
- css-04
- “Windows + VirtualBox Ubuntu” 问题与解决笔记【持续更新】
- VirtualBox开机自动挂载
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- [uboot] (第二章)uboot流程——uboot-spl编译流程