Java新IO】_通道(Channel)\代码

//******

import java.nio.ByteBuffer ;
import java.nio.channels.FileChannel ;
import java.io.File ;
import java.io.FileOutputStream ;
public class FileChannelDemo01{
    public static void main(String args[]) throws Exception{
        String info[] = {"MLDN","MLDNJAVA","www.mldn.cn","www.mldnjava.cn","李兴华","lixinghua"} ;
        File file = new File("." + File.separator + "out.txt") ;
        FileOutputStream output = null ;
        output = new FileOutputStream(file) ;
        FileChannel fout = null ;    // 声明FileChannel对象
        fout = output.getChannel() ;    // 得到输出的通道
        ByteBuffer buf = ByteBuffer.allocate(1024) ;
        for(int i=0;i<info.length;i++){
            buf.put(info[i].getBytes()) ;    // 字符串变为字节数组放进缓冲区之中
        }
        buf.flip() ;
        fout.write(buf) ;    // 输出缓冲区的内容
        fout.close() ;
        output.close() ;
    }
}

//*****

import java.nio.ByteBuffer ;
import java.nio.channels.FileChannel ;
import java.io.File ;
import java.io.FileOutputStream ;
import java.io.FileInputStream ;
public class FileChannelDemo02{
    public static void main(String args[]) throws Exception{
        File file1 = new File("." + File.separator + "note.txt") ;
        File file2 = new File("." + File.separator + "outnote.txt") ;
        FileInputStream input = null ;
        FileOutputStream output = null ;
        output = new FileOutputStream(file2) ;
        input = new FileInputStream(file1) ;
        FileChannel fout = null ;    // 声明FileChannel对象
        FileChannel fin = null ;    // 定义输入的通道
        fout = output.getChannel() ;    // 得到输出的通道
        fin = input.getChannel() ;    // 得到输入的通道
        ByteBuffer buf = ByteBuffer.allocate(1024) ;
        
        int temp = 0 ;

while((temp=fin.read(buf))!=-1){
            buf.flip() ;
            fout.write(buf) ;
            buf.clear() ;    // 清空缓冲区,所有的状态变量的位置恢复到原点
        }
        fin.close() ;
        fout.close() ;
        input.close() ;
        output.close() ;
    }
}

//*****

import java.nio.ByteBuffer ;
import java.nio.MappedByteBuffer ;
import java.nio.channels.FileChannel ;
import java.io.File ;
import java.io.FileOutputStream ;
import java.io.FileInputStream ;
public class FileChannelDemo03{
    public static void main(String args[]) throws Exception{
        File file = new File("." + File.separator + "mldn.txt") ;  
        FileInputStream input = null ;
        input = new FileInputStream(file) ;
        FileChannel fin = null ;    // 定义输入的通道
        fin = input.getChannel() ;    // 得到输入的通道
        MappedByteBuffer mbb = null ;
        mbb = fin.map(FileChannel.MapMode.READ_ONLY,0,file.length()) ;
        byte data[] = new byte[(int)file.length()] ;    // 开辟空间接收内容
        int foot = 0 ;
        while(mbb.hasRemaining()){
            data[foot++] = mbb.get() ;    // 读取数据
        }
        System.out.println(new String(data)) ;    // 输出内容
        fin.close() ;
        input.close() ;
    }
}

//****

import java.nio.ByteBuffer ;
import java.nio.channels.FileChannel ;
import java.io.File ;
import java.io.FileOutputStream ;
public class FileChannelDemo01{
    public static void main(String args[]) throws Exception{
        String info[] = {"MLDN","MLDNJAVA","www.mldn.cn","www.mldnjava.cn","李兴华","lixinghua"} ;
        File file = new File("." + File.separator + "out.txt") ;
        FileOutputStream output = null ;
        output = new FileOutputStream(file) ;
        FileChannel fout = null ;    // 声明FileChannel对象
        fout = output.getChannel() ;    // 得到输出的通道
        ByteBuffer buf = ByteBuffer.allocate(1024) ;
        for(int i=0;i<info.length;i++){
            buf.put(info[i].getBytes()) ;    // 字符串变为字节数组放进缓冲区之中
        }
        buf.flip() ;
        fout.write(buf) ;    // 输出缓冲区的内容
        fout.close() ;
        output.close() ;
    }
}

时间: 2024-10-12 22:51:22

Java新IO】_通道(Channel)\代码的相关文章

Java -- Java 新 IO -- Java 新IO简介

20.1 Java 新IO简介 20.2 缓冲区与Buffer 例:演示缓冲区的操作流程 Class : IntBufferDemo01 20.2.2 深入缓冲区操作 20.2.3 创建子缓冲区 20.2.4 创建只读缓冲区 20.2.5 创建直接缓冲区 20.3 通道 20.3.1 FileChannel 例:使用输出通道输出内容 Class : FileChannelDemo01 例:使用通道进行读写操作 Class :FileChannelDemo02 20.3.2 内存映射 例:内存映射

Java新IO

Java从1.4开始引进了对于输入输出的改进,相关类位于java.nio包中.新IO主要有以下几个特性: (1)字符集编码器和解码器 (2)非阻塞的IO (3)内存映射文件 1. 字符集编码器和解码器 Charset类表示不同的字符集,可以使用Charset.forName方法获得指定名称的字符集对象,与Charset相关的类在java.nio.charset包中. (1)编码 将Unicode编码的字符串编码成指定编码的字节序列 Charset cset = Charset.forName("

java 新IO

传统的IO Java中的InputStream.OutputStream.Reader.Writer这样的面向流的输入输出系统被视为传统的IO.传统的IO是阻塞式的输入输出,并且是通过字节的移动来处理的,即传统的IO一次只能处理一个字节,效率不高. 新IO 新IO和传统的IO有相同的目的,都是用于进行输入输出功能.但是新IO采用内存映射文件的方式来处理输入输出,新IO将文件或文件的一段区域映射到内存中,这样就可以像访问内存一样访问文件了,这种方式要比传统的IO快得多. Java中新IO相关的包如

Java新IO】_文件锁\代码 与字符集

import java.io.File ;import java.io.FileOutputStream ;import java.nio.channels.FileChannel ;import java.nio.channels.FileLock ; public class FileLockDemo{    public static void main(String args[]) throws Exception {        File file = new File("d:&qu

Java新IO】_缓冲区与Buffer\代码

import java.nio.ByteBuffer ;public class ByteBufferDemo01{    public static void main(String args[]){        ByteBuffer buf = ByteBuffer.allocateDirect(10) ;    // 准备出10个大小的缓冲区        byte temp[] = {1,3,5,7,9} ;    // 设置内容        buf.put(temp) ;    /

【第20章:Java新IO】_缓冲区与Buffer

import java.nio.IntBuffer ;public class IntBufferDemo01{    public static void main(String args[]){        IntBuffer buf = IntBuffer.allocate(10) ;    // 准备出10个大小的缓冲区        System.out.print("1.写入数据之前的position.limit和capacity:") ;        System.o

Java新IO】_Selector

DateServer.java import java.net.InetSocketAddress ;import java.net.ServerSocket ;import java.util.Set ;import java.util.Iterator ;import java.util.Date ;import java.nio.channels.ServerSocketChannel ;import java.nio.ByteBuffer ;import java.nio.channel

Java NIO中的通道Channel(二)分散/聚集 Scatter/Gather

什么是Scatter/Gather scatter/gather指的在多个缓冲区上实现一个简单的I/O操作,比如从通道中读取数据到多个缓冲区,或从多个缓冲区中写入数据到通道: scatter(分散):指的是从通道中读取数据分散到多个缓冲区Buffer的过程,该过程会将每个缓存区填满,直至通道中无数据或缓冲区没有空间: gather(聚集):指的是将多个缓冲区Buffer聚集起来写入到通道的过程,该过程类似于将多个缓冲区的内容连接起来写入通道: scatter/gather接口 如下是Scatte

Java 新I/O 通道和缓冲器

package io; import java.nio.*; import java.nio.channels.*; import java.io.*; /* * 三种类型的流用以产生可写的,可读的,可读可写的通道. * getChannel()将会产生一个FileChannel通道,可以向他传送用于读写的ByteBuffer,并且可以锁定文件的某些区域用于独占式访问. * 将字节放于ByteBuffer中的方法用put方法,也可以用wrap方法将以存在的字节数组包装到ByteBuffer中.一