java nio bytebuffer文件读写问题

java nio bytebuffer文件读写问题,第1张

JDK1.4以后就提供java.nio的包,nio主要提供字节与字符的映射、内存映射文件和文件加锁机制

其中内存映射文件在键陪读取大文件时可能会用上,因为内存映射不是直接把文件加载到JVM内存空间

而是借用 *** 作系统对文件的读取,这经历了由当前Java态进入到 *** 作咐亮枝系统内核态,再由 *** 作系统读取文件,

并返回数据到当前Java态的过程。由Java态进入 *** 作系统内核态离不开nio包中两个重要的类

FileChannel 和 ByteBuffer。FileChannel表示文件通道,可以从FileInputStream、FileOutputStream

以及RandomAccessFile对象获取文件通道,你可以从文件通道直接读取文件,衡敏也可以使用“内存映射”

即使用通道,将文件内存映射到ByteBuffer,可以映射一部分内容,也可以映射全部内容,使用内存映射

能大幅提高我们 *** 作大文件的速度

FileChannel 和 ByteBuffer文件读取

[java] view plain copy

package nio

import java.io.BufferedInputStream

import java.io.File

import java.io.FileInputStream

import java.io.IOException

import java.io.RandomAccessFile

import java.nio.ByteBuffer

import java.nio.MappedByteBuffer

import java.nio.channels.FileChannel

import java.nio.channels.FileChannel.MapMode

/**

*

* Channel类似与流,数据可以从Channel读取到Buffer,也可以从Buffer写入到Channel

* 但通道和流还是有区别,比如流只能是单向读或写,而通道可以异步读写

*

* @author yli

*/

public class FileChannelTest {

1、可以,使用Netty进行文件传输主要涉及到FileChannel文件通道,它用来连接文件,可以通过这个通道读写文件。在使用FileChannel之前必须先打开它,FileChannel无法直接打开,可以通兆察过InputStream、OutputStream或RandomAccessFile来获取FileChannel。

2、如果需要从FileChannel中读取数渣档据,要申请一个ByteBuffer,将数据从FileChannel读取到缓冲区中。read()方法返回的int值表示有多少个字节被读如猜乱取到了缓冲区中,表示读取到了文件末尾。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12166332.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存