Java 学习(23)---(IO流之字节流)
字节流
IO 用于在设备间进行数据传输的操作
1.分类:
字节流
|-- 字节输入流
InputStream
int read(): 一次读取一个字节
int read(byte[] bys): 一次读取一个字节数组
|--FileInputStream
|--BufferedInputStream
|-- 字节输出流
OutputStream
void write(int by): 一次写一个字节
void write(byte[] bys,int index,int len): 一次写一个字节数组的一部分
|--FileOutputStream
|--BufferedOutputStream
字符流
|-- 字符输入流
Reader
int read(): 一次读取一个字符
int read(char[] chs): 一次读取一个字符数组
|--InputStreamReader
|--FileReader
|--BufferedReader
String readLine(): 一次读取一个字符串
|-- 字符输出流
Writer
void write(int ch): 一次写一个字符
void write(char[] chs,int index,int len): 一次写一个字符数组的一部分
|--OutputStreamWriter
|--FileWriter
|--BufferedWriter
void newLine(): 写一个换行符
void write(String line): 一次写一个字符串
注意:
a:如果我们没有明确说明按照什么分,默认按照数据类型分。
b: 除非文件用 windows 自带的记事本打开我们能够读懂, 才采用字符流, 否则建议使用字节流。
2.FileOutputStream 写出数据
A:操作步骤
a:创建字节输出流对象
b: 调用 write() 方法
c:释放资源
B:API
构造方法
FileOutputStream(File file)
FileOutputStream(File file ,booleanappend) FileOutputStream(String name)
FileOutputStream(String name ,booleanappend) ;
如果第二个参数为 true ,则将字节写入文件末尾处,而不是写入文件开始处。
成员方法
public void write(int b): 写一个字节
public void write(byte[] b): 写一个字节数组
public void write(byte[] b,int off,int len) :写一个字节数组的一部分
public void close(); 关闭此文件输出流并释放与此流有关的所有系统资源。
C:代码体现:
// 创建字节输出流对象
// FileOutputStream(File file)
// File file = new File("fos.txt");
// FileOutputStream fos = new FileOutputStream(file);
// FileOutputStream(String name)
FileOutputStream fos = newFileOutputStream("fos.txt");
/*
*创建字节输出流对象了做了几件事情:
*A: 调用系统功能去创建文件
*B: 创建 fos 对象
*C: 把 fos 对象指向这个文件
*/
// 写数据
fos.write( fos.write("hello,IO".getBytes());
fos.write( fos.write(""java"".getBytes());
// 释放资源
// 关闭此文件输出流并释放与此流有关的所有系统资源。
fos.close();
/*
*为什么一定要 close() 呢 ?
*A: 让流对象变成垃圾,这样就可以被垃圾回收器回收了
*B: 通知系统去释放跟该文件相关的资源
*/
//java.io.IOException: Stream Closed
//fos.write("java".getBytes());
加入异常处理的代码:
FileOutputStream fos = null ;
try {
// fos = new FileOutputStream("z:\\fos4.txt");
fos = newFileOutputStream("fos4.txt""fos4.txt");
fos .write("java" .getBytes());
} catch (FileNotFoundException e ) { e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 如果 fos 不是 null ,才需要 close() if ( fos != null ) {
// 为了保证 close() 一定会执行,就放到这里了
try {
fos .close();
} catch (IOException e) { e.printStackTrace();
}
}
}
C:要注意的问题
a:创建字节输出流对象做了几件事情 ?
1.调用系统功能去创建文件 2. 创 建 fos 对 象C: 把fos 对象指向这个文件
b: 为什么要 close()?
1. 让流对象变成垃圾,这样就可以被垃圾回收器回收了
2.通知系统去释放跟该文件相关的资源
c:如何实现数据的换行 ?
写入换行符号即可
fos.write("\r\n".getBytes());
d: 如何实现数据的追加写入 ?
new FileOutputStream("fos3.txt", true);
3.FileInputStream 读取数据
A:操作步骤
1.创建字节输入流对象 2.调用 read() 方法 3.释放资源
B: API
构造方法
FileOutputStream(File file) FileOutputStream(String name)
成员方法
int read(): 一次读取一个字节
int read(byte[] b): 一次读取一个字节数组
代码:复制
FileInputStream fis = newFileInputStream( "fos.txt" );
// 方式 1
int by = 0;
while ((by=fis.read())!=-1) {
System. out .print(( char ) by );
}
// 方式 2
byte [] bys = newbyte [1024];
int len = 0;
while ((len=fis.read(bys))!=-1) {
System. out .print( new String( bys ,0, len ));
}
fis.close();
案例:
// 高效字节流一次读写一个字节数组:
publicstaticvoid method4(String srcString, String destString) throws IOException { BufferedInputStream bis = newBufferedInputStream( new FileInputStream (srcString));
newBufferedOutputStream(new FileOutputStream(destString));
byte [] bys = newbyte [1024];
int len = 0;
while ((len = bis.read(bys)) != -1) { bos.write(bys, 0, len);
}
bos.close();
bis.close();
}
// 高效字节流一次读写一个字节:
publicstaticvoid method3(String srcString, String destString) throws IOException {
BufferedInputStream bis = newBufferedInputStream( new FileInputStream( srcString));
BufferedOutputStream bos = newBufferedOutputStream( new FileOutputStream(destString));
int by = 0;
while ((by = bis.read()) != -1) { bos.write(by);
}
bos.close();
bis.close();
}
// 基本字节流一次读写一个字节数组
publicstaticvoid method2(String srcString, String destString) throws IOException {
FileInputStream fis = new FileInputStream(srcString); FileOutputStream fos = new FileOutputStream(destString); byte [] bys = newbyte [1024];
int len = 0;
while ((len = fis.read(bys)) != -1) { fos.write(bys, 0, len);
}
fos.close();
fis.close();
}
// 基本字节流一次读写一个字节
publicstaticvoid method1(String srcString, String destString) throws IOException {
FileInputStream fis = new FileInputStream(srcString); FileOutputStream fos = new FileOutputStream(destString); int by = 0;
while ((by = fis.read()) != -1) { fos.write(by);
}
fos.close();
fis.close();
}
4.字节缓冲区流
通过定义数组的方式确实比以前一次读取一个字节的方式快很多, 所以, 看来有一个缓冲区还是非常好的。
既然是这样的话,那么, java 开始在设计的时候,它也考虑到了这个问题,就专门提供了带缓冲区的字节类。
这种类被称为:缓冲区类 (高效类 )
A:BufferedOutputStream B:BufferedInputStream

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
8月3日云栖精选夜读 | 阿里巴巴宣布 Sentinel 开源,进一步完善 Dubbo 生态(附PPT和视频)
1、当服务量大到一定程度,流量扛不住的时候,该如何处理? 2、应用之间相互依赖,当应用A出现响应时间过长,影响到应用B的响应,进而产生连锁反应影响整个依赖链上的所有应用,该如何处理? 热点热议 阿里巴巴宣布 Sentinel 开源,进一步完善 Dubbo 生态(附PPT和视频) 作者: 中间件小哥 发表在:阿里云分布式应用服务 18岁天才华裔少年用一个经典算法,推翻量子加速神话! 作者: 技术小能手 发表在:新智元 ImageNet分类精度再创新高!李飞飞组ECCV Oral提出全新渐进式神经结构搜索 作者: 技术小能手 发表在:新智元 知识整理 前端性能优化总结 作者: testgdgdg TensorFlow.js 入门指南 作者: 技术小能手 发表在:磐创AI SpringMVC中异步处理的几种方式 作者: 融科聂晨 精通SpringBoot——整合RabbitMQ消息队列 作者: developlee Python全栈 MySQL 数据库 (SQL查询、备份、恢复、授权) 作者: 巴黎香榭 美文回顾 Go语言学习重点 作者: 厉力文武 DUBBO服务治理 作者: 壹玖 使用RE...
-
下一篇
Java 学习(24)---(IO流之字符流)
字符流 字节流操作中文数据不是特别的方便,所以就出现了转换流。转换流的作用就是把字节流转换字符流来使用。 转换流其实是一个字符流 字符流 =字节流 +编码表 编码表 A:就是由字符和对应的数值组成的一张表 B:常见的编码表 ASCII ISO-8859-1 GB2312 GBK GB18030 UTF-8 C:字符串中的编码问题编码 String -- byte[] 解码 byte[] -- String IO 流中的编码问题 A:OutputStreamWriter OutputStreamWriter(OutputStreamos): 默 认 编 码 , GBK OutputStreamWriter(OutputStreamos,StringcharsetName): 指定编码。 B:InputStreamReader InputStreamReader(InputStream is): 默 认 编 码 , GBK InputStreamReader(InputStreamis,StringcharsetName): 指定编码 C:编码问题其实很简单编码只要一致即可 字符流 Rea...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL数据库在高并发下的优化方案
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8编译安装MySQL8.0.19
- Dcoker安装(在线仓库),最新的服务器搭配容器使用