zoukankan      html  css  js  c++  java
  • 从头认识java-16.4 nio的读与写(ByteBuffer的使用)

    这一章节我们来讨论一下nio的读与写。

    1.nio的读

    package com.ray.ch16;
    
    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;
    
    public class Test {
    
    	public static void main(String[] args) throws IOException {
    		RandomAccessFile aFile = new RandomAccessFile("d://fg.ini", "rw");
    		FileChannel inChannel = aFile.getChannel();
    		ByteBuffer buf = ByteBuffer.allocate(48);
    		int bytesRead = inChannel.read(buf);
    		while (bytesRead != -1) {
    			buf.flip();
    			while (buf.hasRemaining()) {
    				System.out.print((char) buf.get());
    			}
    			buf.clear();
    			bytesRead = inChannel.read(buf);
    		}
    		aFile.close();
    	}
    }
    


    过程图:(引用自http://www.iteye.com/magazines/132-Java-NIO)


    数据读取的过程:

    (1)nio不像io那样直接输出流,而是先建立输送数据的管道

    (2)nio通过一个buffer缓存器来进行交互。而不再是直接读取流

    (3)ByteBuffer.allocate(48)里面的数字决定缓存器的存储数据大小

    (4)buf.flip() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。

    (5)假设你断点在输出语句上面,就能够发现一个比較特别的现象,它的输出是一个一个英文字符,像打字一样的输出



    2.nio的写

    package com.ray.ch16;
    
    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;
    
    public class Test {
    
    	public static void main(String[] args) throws IOException {
    		RandomAccessFile aFile = new RandomAccessFile("d://123.txt", "rw");
    		FileChannel inChannel = aFile.getChannel();
    		ByteBuffer buf = ByteBuffer.wrap("hello world tttttttttttttt"
    				.getBytes());
    		inChannel.write(buf);
    		buf.clear();
    		inChannel.close();
    		aFile.close();
    	}
    }
    


    数据写入的过程:

    (1)nio不像io那样直接输入流,而是先建立输送数据的管道

    (2)nio通过一个buffer缓存器来进行交互。而不再是直接写入流

    (3)使用ByteBuffer.wrap写入缓存器。因为缓存器仅仅接受二进制数据,因此须要把里面的数据转换格式

    (4)通过通道,把缓存器里面的数据输送到文件中面


    总结:这一章节主要介绍了nio的读与写的过程。


    这一章节就到这里,谢谢。

    -----------------------------------

    文件夹



  • 相关阅读:
    XP系统下快速切换ip的bat脚本配置
    Spring学习札记
    hibernate防止sql注入
    重载,继承,重写和多态的区别:
    Oracle Sql基础
    Android开发——利用Cursor+CursorAdapter实现界面实时更新
    Android开发——09Google I/O之让Android UI性能更高效(1)
    Android开发——MediaProvider源码分析(2)
    Android开发——Android搜索框架(二)
    [转]activity的启动方式(launch mode)
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7068274.html
Copyright © 2011-2022 走看看