FileChannel与ByteBuffer的使用示例
DirectByteBuffer直接内存的使用场景和作用
生命周期长的大对象,
减少java堆GC, 减少内存copy
http://www.importnew.com/26334.html
public class DirectByteBufferTest {
@Test
public void test_copyFile() throws IOException {
ByteBuffer byteBuffer = ByteBuffer.allocateDirect();//100kbytes
FileChannel readChannel = FileChannel.open(new File("D:/in.txt").toPath());
//out.txt必须已经存在, writeChannel必须以WRITE方式打开
FileChannel writeChannel = FileChannel.open(new File("D:/out.txt").toPath(), StandardOpenOption.WRITE);
int read;
while ((read = readChannel.read(byteBuffer)) != -) {
//buffer从读切换到写
byteBuffer.flip();
// 打印信息必须放在flip后面, 否则decode出来的是上次read的结果.根据in.txt的字符编码修改下面的ISO_8859_1
//System.out.println(read + "--" + StandardCharsets.ISO_8859_1.decode(byteBuffer));
writeChannel.write(byteBuffer);
// 写完之后清空缓冲区,否则read=0一直死循环
byteBuffer.clear();
}
writeChannel.close();
readChannel.close();
}
}
测试其他总结:
ByteBuffer.allocateDirect缓冲区大小根据输入文件的大小调整,但是太大时输出性能也提高不了多少, 对于大文件,1M的缓存区应该差不多了。对于超大文件, 应该换成其他读取方式
FileChannel与ByteBuffer的使用示例的更多相关文章
- NIO之FileChannel操作示例
1. 写文件操作 /** * 写文件 */ public class FileChannelTest { public static void main(String[] args) throws I ...
- FileChannel指南
推荐关注公众号:锅外的大佬 每日推送国外技术好文,帮助每位开发者更优秀地成长 原文链接:https://www.baeldung.com/java-filechannel 作者:baeldung 译者 ...
- Java NIO 文件通道 FileChannel 用法
FileChannel 提供了一种通过通道来访问文件的方式,它可以通过带参数 position(int) 方法定位到文件的任意位置开始进行操作,还能够将文件映射到直接内存,提高大文件的访问效率.本文将 ...
- ByteBuffer用法小结
在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入缓冲区.缓冲区是定长的,基本上它只是一个列表,它的所有元素 ...
- ByteBuffer用法总结
转自:http://blog.csdn.net/mars5337/article/details/6576417 在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信道(SocketChanne ...
- ByteBuffer详解
注意:一定要了解这个缓冲类的几个方法和那几个字段.不然你不会明白的. 字段: position ,limit ,mark 方法:clear(), hasRemaining(),flip() 推荐博客: ...
- 【Java学习】调用ByteBuffer.getInt()方法得到808464432
调用ByteBuffer.getInt()方法遇到的奇怪错误 最近在参加阿里的中间件比赛,中间用到了RocketMQ的思想,并且主要集中在使用NIO来读写文件.其中遇到了一个很蛋疼的问题,想了半天想不 ...
- Java NIO中的读和写
一.概述 读和写是I/O的基本过程.从一个通道中读取只需创建一个缓冲区,然后让通道将数据读到这个缓冲区.写入的过程是创建一个缓冲区,用数据填充它,然后让通道用这些数据来执行写入操作. 二.从文件中读取 ...
- Java编程思想学习笔记_5(IO流)
一.用DataInputStream读取字符 可以使用available方法查看还有多少可供存取的字符.示例如下: public class Test1 { public static void ma ...
随机推荐
- S3C2410中文芯片手册-11.串口
目录 11 UART Overview Featrues UART Operation Data Transmission Data Reception Auto Flow Control(AFC) ...
- jcrop的bug
1 360(7.1.1.620,内核:31.0.1650.63)的极速模式下,出现裁剪框后,鼠标点击,页面就会滑动到底部. 查看了下源码,发现是下面的代码: function watchKeys() ...
- 不同类型input尺寸设置区别
最近发现为不用类型的input设置相同的尺寸,却得到了不一样的尺寸结果.发现不同类型的input的height和width竟然含义不同.在此小整理一下. (1)button类型 规律 button类型 ...
- Python 中list, dictionary 与 file相互操作
Python的list,dictionary可以写入file, 也可以从file中读取. 关于list: 1)写入文件 self.existedBlog.write("you ...
- ZOJ1610(经典线段树涂色问题)
Description Painting some colored segments on a line, some previously painted segments may be covere ...
- netty中的EventLoop和EventLoopGroup
Netty框架的主要线程就是I/O线程,线程模型设计的好坏,决定了系统的吞吐量.并发性和安全性等架构质量属性. 一.Netty的线程模型 在讨论Netty线程模型时候,一般首先会想到的是经典的Reac ...
- java基础知识(3)----面向对象
三:面向对象:特点: 1:将复杂的事情简单化.2:面向对象将以前的过程中的执行者,变成了指挥者.3:面向对象这种思想是符合现在人们思考习惯的一种思想. 过程和对象在我们的程序中是如何体现的呢?过程其实 ...
- zookeeper.out: Permission denied错误解决方法
[hadoop@node1 root]$ zkServer.sh start JMX enabled by default Using config: /opt/software/zookeeper- ...
- 韩顺平循序渐进学JAVA从入门到精通 视频全套,需要的联系我
0讲-开山篇.avi 10讲-访问修饰符.重载.覆盖.avi 11讲-约瑟夫问题.avi 12讲-多态.avi 13讲-抽象类.接口.avi 14讲-final.作业评讲.avi 15讲-作业.测试题 ...
- IPC编程之消息队列
本地的进程间通信(IPC)有很多种方式,但可以总结为下面3类: 1.消息传递(管道.FIFO.消息队列) 2.同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 3.共享内存(匿名的和具名的) ...