【第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.out.println("position = " + buf.position() + ",limit = " + buf.limit() + ",capacty = " + buf.capacity()) ;
        int temp[] = {5,7,9} ;// 定义一个int数组
        buf.put(3) ;    // 设置一个数据
        buf.put(temp) ;    // 此时已经存放了四个记录
        System.out.print("2、写入数据之后的position、limit和capacity:") ;
        System.out.println("position = " + buf.position() + ",limit = " + buf.limit() + ",capacty = " + buf.capacity()) ;

buf.flip() ;    // 重设缓冲区
        // postion = 0 ,limit = 原本position
        System.out.print("3、准备输出数据时的position、limit和capacity:") ;
        System.out.println("position = " + buf.position() + ",limit = " + buf.limit() + ",capacty = " + buf.capacity()) ;
        System.out.print("缓冲区中的内容:") ;
        while(buf.hasRemaining()){
            int x = buf.get() ;
            System.out.print(x + "、") ;
        }
    }
}

import java.nio.IntBuffer ;
public class IntBufferDemo02{
    public static void main(String args[]){
        IntBuffer buf = IntBuffer.allocate(10) ;    // 准备出10个大小的缓冲区
        IntBuffer sub = null ;    // 定义子缓冲区
        for(int i=0;i<10;i++){
            buf.put(2 * i + 1) ;    // 在主缓冲区中加入10个奇数
        }
        
        // 需要通过slice() 创建子缓冲区
        buf.position(2) ;
        buf.limit(6) ;
        sub = buf.slice() ;
        for(int i=0;i<sub.capacity();i++){
            int temp = sub.get(i) ;
            sub.put(temp-1) ;
        }

buf.flip() ;    // 重设缓冲区
        buf.limit(buf.capacity()) ;
        System.out.print("主缓冲区中的内容:") ;
        while(buf.hasRemaining()){
            int x = buf.get() ;
            System.out.print(x + "、") ;
        }
    }
}

import java.nio.IntBuffer ;
public class IntBufferDemo03{
    public static void main(String args[]){
        IntBuffer buf = IntBuffer.allocate(10) ;    // 准备出10个大小的缓冲区
        IntBuffer read = null ;    // 定义子缓冲区
        for(int i=0;i<10;i++){
            buf.put(2 * i + 1) ;    // 在主缓冲区中加入10个奇数
        }
        read = buf.asReadOnlyBuffer()  ;// 创建只读缓冲区

read.flip() ;    // 重设缓冲区
        System.out.print("主缓冲区中的内容:") ;
        while(read.hasRemaining()){
            int x = read.get() ;
            System.out.print(x + "、") ;
        }
        read.put(30) ;    // 修改,错误
    }
}

//ByteBuffer    系统优化比较速度快点

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) ;    // 设置一组内容
        buf.flip() ;

System.out.print("主缓冲区中的内容:") ;
        while(buf.hasRemaining()){
            int x = buf.get() ;
            System.out.print(x + "、") ;
        }
    }
}

时间: 2025-01-31 00:37:52

【第20章:Java新IO】_缓冲区与Buffer的相关文章

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

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

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】_缓冲区与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) ;    /

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

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】_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复习--IO(输入/输出){Java NIO}

http://my.oschina.net/u/2263278/blog/508770中介绍的BufferedReader时提到它的一个特征----当BufferedReader读取输入流中的数据时,如果没有读到有效数据,程序将在此处阻塞该线程的执行(使用InputStream的read()方法从流中读取数据时,如果数据源中没有数据,它也会阻塞该线程),也就是前面介绍的输入流.输出流都是阻塞式的输入.输出.传统的输入流.输出流都是通过字节的移动来处理的,即使我们不直接去处理字节流,但底层的实现还

Lua_第 20 章 IO库

第 20 章 IO库 I/O  库为文件操作提供两种模式.简单模式(simple  model)拥有一个当前输入文件和一个当前输出文件,并且提供针对这些文件相关的操作.完全模式(complete  model) 使用外部的文件句柄来实现.它以一种面对对象的形式,将所有的文件操作定义为文件句柄的方法.简单模式在做一些简单的文件操作时较为合适.在本书的前面部分我们一直都在使用它.但是在进行一些高级的文件操作的时候,简单模式就显得力不从心.例 如同时读取多个文件这样的操作,使用完全模式则较为合适.I/