java bio总结
、同步异步、阻塞非阻塞(目前不是很清楚,这篇博客写完后,后续进行处理)
1.同步和异步:关注的是消息的通讯机制,
同步:发起调用后,如果没有得到结果,该调用是不会返回的;该调用者会主动等待调用返回。
异步:发起调用后,调用立刻返回,但并不是返回的结果;也就是说调用者并不会立刻得到结果,而是被调用者通知调用者,或者通过回调函数处理这个调用。
2.阻塞和非阻塞:指的是程序等待调用结果时的状态。只有同步才会有阻塞和非阻塞的概念。
阻塞:发起调用后当前线程会被挂起,直到有返回
非阻塞:发起调用后,当前线程不会被挂起,而是继续执行。
二、io流的分类
1.输入流、输出流:根据流是否流向处理器来确定是输入流还是输出流。
2.字节流、字符流:字节流读到的数据不会进行任何处理;字符流读取到的二进制数据会根据相应的编码进行转换为字符,字符流=字节流+解码。
三、io流类结构图


四、常用功能
注意一点:使用完io后,一定要关闭流
1.io流对文件进行读取
/**
* 字符流读写文本文件
* 在使用io读写文本文件的时候一定要记住关闭流
*/
public class Test2 { public static void main(String[] args) {
ReadFile(new File("E:/b.txt"));
WriteFile(new File("E:/c.txt"));
} public static void ReadFile(File file){
FileReader fr = null;
BufferedReader br = null;
InputStreamReader isr = null;
try { System.out.println("\r\n========自己定义缓冲数组来读取文件================");
fr = new FileReader(file);
char[] buffer1 = new char[3];
int len1 = 0;
while((len1 = fr.read(buffer1)) != -1){
System.out.print(new String(buffer1,0,len1));
} System.out.println("\r\n========使用缓冲流来读取文件================");
br = new BufferedReader(new FileReader(file));
String temp = "";
while((temp = br.readLine()) != null){
System.out.println(temp);
} System.out.println("\r\n========使用转换流来读取文件===========");
isr = new InputStreamReader(new FileInputStream(file),"utf-8");
char[] buffer2 = new char[1];
int len2 = 0;
while((len2 = isr.read(buffer2)) != -1 ){
System.out.print(new String(buffer2,0,len2));
} } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
br.close();
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
} } public static void WriteFile(File file){
FileOutputStream fos = null;
FileWriter fw = null;
BufferedWriter bw = null;
try {
//========使用字节流写入文件===========
fos = new FileOutputStream(file);
fos.write("测试写入文件abc123。。".getBytes());
fos.write("测试是否叠加".getBytes());
fos.flush();
//========使用字符流写入文件===========
fw = new FileWriter(file,true);
fw.write("\r\n========使用字符流写入文件===========");
fw.write("这是用FileWriter写入的数据 ");
fw.flush();
//========使用缓冲流写入文件===========
//FileWriter默认是会覆盖上一次的数据,所以在新建的时候要将是否追加参数设置为true
bw = new BufferedWriter(new FileWriter(file,true));
bw.newLine();
bw.write("使用缓冲流写入");
bw.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
bw.close();
fw.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} }
2.字节流对文件进行复制
/**
* 字节流对文件进行复制
*
*/
public class Test1 { public static void main(String[] args) throws IOException {
copy();
} public static void copy(){
FileInputStream fis = null;
FileOutputStream fos = null;
try{
fis = new FileInputStream("E:/a.txt");
fos = new FileOutputStream("E:/b.txt");
byte[] buffer = new byte[1024];//使用数组进行缓冲,提高io速度
int len = 0;
while((len = fis.read(buffer)) != -1){
fos.write(buffer, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
} }
}
}
五、IO流使用的一些细节
1.IO流中,缓冲类都是Buffered*类,其并不具备读写能力,只是内部维护了一个8kb的数组,只有在调用了close()和flush()或者字节数组已经满了才会将数据写入到硬盘。提高了文件的读写效率。
2.文件输出流,目标文件如果不存在,则会创建文件。其write方法默认清空文件内容,再写入内容,需要在构造方法中设置才能成功。
3.FileOutputStream 参数为int时,只会把低8位写出,剩余24位丢弃。
4.转换流的作用就是将字节流转换为字符流,并可以按照指定的编码对数据进行读写。
java bio总结的更多相关文章
- Java BIO、NIO、AIO 学习(转)
转自 http://stevex.blog.51cto.com/4300375/1284437 先来个例子理解一下概念,以银行取款为例: 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Ja ...
- JAVA bio nio aio
[转自]http://qindongliang.iteye.com/blog/2018539 在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解.具体如下: 序号 问题 1 什么是同步? ...
- Java BIO、NIO、AIO-------转载
先来个例子理解一下概念,以银行取款为例: 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写). 异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Ja ...
- Java BIO、NIO、AIO 学习
正在学习<大型网站系统与JAVA中间件实践>,发现对BIO.NIO.AIO的概念很模糊,写一篇博客记录下来.先来说个银行取款的例子: 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO ...
- JAVA BIO与NIO、AIO的区别
IO的方式通常分为几种,同步阻塞的BIO.同步非阻塞的NIO.异步非阻塞的AIO. 一.BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSock ...
- 3. 彤哥说netty系列之Java BIO NIO AIO进化史
你好,我是彤哥,本篇是netty系列的第三篇. 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识. 简介 上一章我们介绍了IO的五种模型,实际上Java只支持其中的三种,即BIO/NIO/ ...
- [转帖]JAVA BIO与NIO、AIO的区别(这个容易理解)
JAVA BIO与NIO.AIO的区别(这个容易理解) https://blog.csdn.net/ty497122758/article/details/78979302 2018-01-05 11 ...
- Java BIO、NIO、AIO 原理
先来个例子理解一下概念,以银行取款为例: 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写). 异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Ja ...
- Java BIO、NIO、AIO 基础,应用场景
Java对BIO.NIO.AIO的支持: Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必 ...
- Java BIO NIO 与 AIO
回顾 上一章我们介绍了操作系统层面的 IO 模型. 阻塞 IO 模型. 非阻塞 IO 模型. IO 复用模型. 信号驱动 IO 模型(用的不多,知道个概念就行). 异步 IO 模型. 并且介绍了 IO ...
随机推荐
- Python图形库Turtle
画笔绘制状态函数 函数 描述 pendown() 放下画笔 penup() 提起画笔,与pendown()配合使用 pensize(width) 设置画笔线条的粗细为指定大小 画笔运动函数 函数 描述 ...
- pip 解决下载包速度慢的问题
对于Python开发用户来讲,PIP安装软件包是家常便饭.但国外的源下载速度实在太慢,浪费时间.而且经常出现下载后安装出错问题.所以把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以提高安装成 ...
- 为什么Elasticsearch查询变得这么慢了?
参考内容:https://mp.weixin.qq.com/s/RTpBaFpNELQCO6VE0KMfsw
- Paths on a Grid POJ - 1942 组合数学 (组合数的快速计算)
题意:格路问题 没什么难度 难点在于如何快速计算相对较大的组合数 思路:运用手写计算组合数的方式进行计算 如c(8,3) 如果手算就是 8*7*6/(3*2*1)这样可以很快得解出 计算代码为: ...
- THUWC2018游记
前言 这次THUWC有pretest,非常不错.但还是要对拍. DAY1 上午先去报个到. 下午1:30开始比赛,状态还是很好的. 开场先看题. 发现t1是个联赛贪心题,就花了半个小时写完+拍完了. ...
- 【UOJ349】【WC2018】即时战略 LCT 动态点分治
这是一道交互题 题目大意 有一棵\(n\)个点的树.最开始\(1\)号点是白的,其他点是黑的. 每次你可以执行一个操作:\(explore(x,y)\).要求\(x\)是一个白点.该函数会返回从\(x ...
- jQuery 方式模拟提交表单
//add test moudle define(function(require , exports , module) { //=========== 不使用模块化只使用如下代码即可 start ...
- 【Luogu3731】[HAOI2017]新型城市化(网络流,Tarjan)
[Luogu3731][HAOI2017]新型城市化(网络流,Tarjan) 题面 洛谷 给定一张反图,保证原图能分成不超过两个团,问有多少种加上一条边的方法,使得最大团的个数至少加上\(1\). 题 ...
- 「SDOI2014」重建 解题报告
「SDOI2014」重建 题意 给一个图\(G\),两点\((u,v)\)有边的概率是\(p_{u,v}\),求有\(n-1\)条边通行且组成了一颗树的概率是多少. 抄了几个矩阵树定理有趣的感性说法 ...
- Ubuntu常用软件安装(小集合)
跨平台系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#linux Linux包系列的知识:https://www.cnblogs.com/dun ...