`

旧的I/O类库中有三个类被赋予了产生FileChannel的能力

 
阅读更多

旧的I/O类库中有三个类被修改了,用以产生FileChannel。来看看他们的例子:

package com.wjy.nio;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class GetChannel {
	private static final int BSIZE=1024;
	public static void main(String args[]){
		try {
			FileChannel fcChannel=new FileOutputStream(new File("./file/out.txt")).getChannel();
			fcChannel.write(ByteBuffer.wrap("Some text ".getBytes()));
			fcChannel.close();
			
			fcChannel=new RandomAccessFile(new File("./file/out.txt"), "rw").getChannel();
			fcChannel.position(fcChannel.size());  //移动到文件末尾,以添加内容
			fcChannel.write(ByteBuffer.wrap("randomaccessfile".getBytes()));
			fcChannel.close();
			
			fcChannel=new FileInputStream(new File("./file/out.txt")).getChannel();
			ByteBuffer buff=ByteBuffer.allocate(BSIZE);
			fcChannel.read(buff);
			buff.flip();	//这句很重要,没有这句出不来结果。一旦调用read()来向ByteBuffer存储字节,就必须调用缓冲器上的flip(),让它做好让别人读取字节的准备。
			while(buff.hasRemaining()){
				System.out.print((char)buff.get());
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

/*OutPut
Some text randomaccessfile
*///

 号外:一旦调用read()来向ByteBuffer存储字节,就必须调用缓冲器上的flip(),让它做好让别人读取字节的准备。

 

请注意:如果打算使用缓冲器执行进一步的read()操作,我们也应该必须调用clead()为下次read()做好准备。所以,正常的过程应该是:

 

         while(in.read(buffer)!=-1)

              {

                  buffer.flip();    //准备好写

                  out.write(buffer);

                  buffer.clear();   //准备好读

              }

 

 

分享到:
评论

相关推荐

    flume中的FileChannel的优化

    经过对Flume FileChannel相关源码的分析,导致FileChannel吞吐率下降的主要原因集中于事务的提交过程——commit

    muyinchen#woker#07 Java的NIO之FileChannel1

    7.1 打开一个FileChannel 7.2 从FileChannel通道中读取数据 7.3 向FileChannel中写入数据: 7.4 关闭FileCha

    txt文档阅读器

    //测量第一个字符串,与第三个参数即宽度相比 paraLines.add(strParagraph.substring(0, nSize)); //获得0到nSize的字符串 strParagraph = strParagraph.substring(nSize); //字符串变成从nSize...

    【IT十八掌徐培成】Java基础第26天-06.FileChannel-RandomAccessFile-CopyFile.zip

    【IT十八掌徐培成】Java基础第26天-06.FileChannel-RandomAccessFile-CopyFile.zip

    mina:Java Nio Apache Mina Java Nio

    通道表示到实体,如硬件设备、文件、网络套接字或可以执行一个或多个不同 I/O 操作(如读取或写入)的程序组件的开放的连接。 在以往的java的IO操作的过程中都是面向字节流操作,并且读写操作是单向的操作,而在java...

    【Sansui】java各种流整理demo

    java各类IO流的整理demo,其内包含InputStream/OutputStream BufferedReader流 FileOutputStream/FileInputStream流 PrintWriter流 DataOut/DataIn流 Object流 FileChannel类;

    卫斯理合集 倪匡

    合并文本代码,读取文件,合并为一个txt public static final int BUFSIZE = 1024 * 8; public static void mergeFiles(String outFile, ArrayList<String> files) { FileChannel outChannel = null; try { ...

    sambox:一个PDFBox分支,打算用作Sejda和PDFsam的PDF处理程序

    要读取的多个I / O实现。 SAMBox使用允许使用基于java.nio.channels.FileChannel , java.io.InputStream和java.nio.MappedByteBuffer的提供的实现之一(是否缓冲)。 通过使用java.lang.StringBuilder池最小化GC。...

    编写一个java应用程序将一个包含多个子目录和文件的目录复制到另外一个指定的目录下

    编写一个java应用程序,将一个包含多个子目录和文件的目录复制到另外一个指定的目录下。 实验要求 1)欲复制的目录中包含的文件数和子目录层次未知,必须在程序执行时获得这些信息。 2)显示欲复制的目录的...

    jruby-stdin-channel:JRuby 扩展为 STDIN 公开可中断的 NIO FileChannel

    jruby-stdin-channel JRuby Java 扩展 gem,它从 Java System.in stdin 中提取可中断的FileChannel。 使用这个 gem,在阻塞read方法上调用close将解除阻塞,这与普通的 JRuby $stdin 。 使用close转义阻塞读取仅适用...

    java网络编程NIO视频教程

    01-Java NIO-课程简介.mp4 02-Java NIO-概述.mp4 03-Java NIO-Channel-概述.mp4 04-Java NIO-Channel-FileChannel(介绍和示例).mp4 ...14-Java NIO-Buffer-三个属性和类型.mp4 15-Java NIO-Buffer-分配和读写数据.mp4

    ip地址库 很全的库

    * 如果是地区记录,0x1和0x2的含义不明,但是如果出现这两个字节,也肯定是跟着3个字节偏移,如果不是 则为0结尾字符串 三. * "起始地址/结束地址偏移"记录区 1. 每条记录7字节,按照起始地址从小到大排列 a. ...

    muyinchen#woker#06 Java的NIO之不同channel之间传输数据1

    两个通道之间传输数据的方式有两种,分别是:FileChannel 的transferFrom()方法可以将数据从源通道传输到FileChannel中(这个方法在

    Jackcess(Java的Access数据库操作库) v1.2.9

    Jackcess是一个Java 类库,用来读写微软的Access 数据库。 Jackcess 1.2.9 这个小功能版本增加了一些功能,以方便实施参照完整性和更方便的数据库构造。另一种FileChannel的实现,现在是完全基于内存在更广泛的情况...

    java 工具包 h264转码MP4 支持html5播放格式

    H264TrackImpl h264TrackImpl = new H264TrackImpl(new ... FileChannel fChannel = new FileOutputStream(new File("C://a.mp4")).getChannel(); mp4f.writeContainer(fChannel); fChannel.close();

    Java NIO实战开发多人聊天室

    14-Java NIO-Buffer-三个属性和类型.mp4 17-Java NIO-Buffer-缓冲区分片.mp4 18-Java NIO-Buffer-只读缓冲区.mp4 19-Java NIO-Buffer-直接缓冲区.mp4 21-Java NIO-Selector-概述.mp4 23-Java NIO-Selector-示例代码...

    01_尚硅谷_Java NIO_课件_V1.01

    1.1 阻塞 IO 2.3 FileChannel 介绍和示例 2.4 FileChannel 操作详解

    2021最新-Java NIO视频教程-视频教程网盘链接提取码下载 .txt

    本套视频教程内容丰富,讲解透彻,由浅入深,循序渐进,每个技术点既有理论讲解,又有配套实践案例,真正的理论与实践相结合。教程内容涵盖:阻塞和非阻塞IO、Channel通道、Buffer缓冲区、Selector选择器、Pipe管道...

    javaSE 关于IO几种读取方式的性能比较

    javaSE 关于IO几种读取方式的性能比较 1.二进制数据 2.字符数据 3.压缩文件

    jdk-14_linux-x64_bin.rpm

    非易失性映射的字节缓冲将添加新的 JDK 特定文件映射模式,该模式允许 FileChannel API 用于创建引用非易失性内存(NVM)的 MappedByteBuffer 实例。 358:Helpful NullPointerExceptions 改进 ...

Global site tag (gtag.js) - Google Analytics