博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaIO学习
阅读量:5046 次
发布时间:2019-06-12

本文共 2346 字,大约阅读时间需要 7 分钟。

参考:

Java IO:  

Java NIO: 

这里写的东西为自己的总结,学习的话建议大家仔细去读上面提到的两篇文章。

Java IO分为两种:Blocking IO(BIO) & Non blocking IO(NIO)

BIO

Java中BIO包括基于字节的Stream,基于字符的Writer&Reader等,在使用时优先使用Reader&Writer。BIO经常用于与Property类一起使用读取properties文件,如下所示:

public class StreamProps {			public void testStream() throws IOException{		Properties props = new Properties();		String path = Thread.currentThread().getContextClassLoader().getResource("").getPath().substring(1);		File testFile = new File(path + "test.txt");				FileReader rd = new FileReader(testFile);		props.load(rd);		FileWriter wt = new FileWriter(testFile);		props.store(wt, "Write finished");				wt.close();	}		public static void main(String[] args) throws IOException{		Stream stream = new Stream();		stream.testStream();	}}

NIO

NIO的好处从名字可以看出来,可以节省资源,尤其是对于服务器,这种方式是几乎是必需的。与BIO基于流的方式不同,NIO是基于块的IO,这样对提升读取效率。NIO中这几个部分是基础:Channel,Buffer和Server端常用的Selector。

Channel:双向,用于数据传输。

Buffer:用于缓存数据

Selector:根据监听的端口来寻找注册的Channel

下面这段代码用于实现文件拷贝,使用了Channel和Buffer:

public class  NIO {			private FileInputStream fin;	private FileOutputStream fout;	public void copyFile() throws IOException{		String path = Thread.currentThread().getContextClassLoader().getResource("").getPath().substring(1);		File beforeFile = new File(path + "before.txt");		fin = new FileInputStream(beforeFile);		File afterFile = new File(path + "after.txt");			fout = new FileOutputStream(afterFile);		FileChannel fcin = fin.getChannel();		FileChannel fcout = fout.getChannel();		ByteBuffer buffer = ByteBuffer.allocate(1024);				while(true){			buffer.clear();						if( fcin.read(buffer) == -1 ) break;			buffer.flip();			fcout.write(buffer);		}	}		public static void main(String[] args) throws IOException{		NIO nio = new NIO();		nio.copyFile();	}}
下面这个例子介绍了Server端NIO的使用,源码来自:

import java.io.*;import java.net.*;import java.nio.*;import java.nio.channels.*;import java.util.*;public class MultiPortEcho{  private int ports[];  private ByteBuffer echoBuffer = ByteBuffer.allocate( 1024 );  public MultiPortEcho( int ports[] ) throws IOException {    this.ports = ports;    go();  }  private void go() throws IOException {    // Create a new selector    Selector selector = Selector.open();    // Open a listener on each port, and register each one    // with the selector    for (int i=0; i

转载于:https://www.cnblogs.com/jubincn/archive/2013/04/26/3381110.html

你可能感兴趣的文章
Centos6.4安装JDK
查看>>
201521123069 《Java程序设计》 第4周学习总结
查看>>
线性表的顺序存储——线性表的本质和操作
查看>>
【linux】重置fedora root密码
查看>>
用swing做一个简单的正则验证工具
查看>>
百度坐标(BD-09)、国测局坐标(火星坐标,GCJ-02)和WGS-84坐标互转
查看>>
pig自定义UDF
查看>>
输入名字显示其生日,没有则让输入生日,做记录
查看>>
爬虫综合大作业
查看>>
Kubernetes 运维学习笔记
查看>>
并查集 经典 畅通工程
查看>>
Spark MLlib 之 Naive Bayes
查看>>
php修改SESSION的有效生存时间
查看>>
spring security 11种过滤器介绍
查看>>
Hibernate一对多、多对一关联
查看>>
一、记录Git使用中遇到的问题及解决方法
查看>>
学习网址
查看>>
前端表格插件datatables
查看>>
内部类
查看>>
树链剖分入门
查看>>