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条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群