heimaJava17
java
IO流
缓冲流
概念
- 缓存流也称为高效流、或者高级流。之前学习的字节流也可以称为原始流
- 作用:缓冲流自带缓冲区、可以提高原始字节流、字符流读写数据的性能
分类
字节缓冲流
字节缓冲输入流:BufferedInputStream
- 提高字节输入流读取数据的性能,读写功能并无变化
字节缓冲输出流:BufferedOutputStream
- 提高字节输出流读取数据速度,读写功能并无变化
构造器 说明 public BufferedInputStream(InputStream is) 可以把低级字节输入流包装称一个高级的缓冲字节输入流管道,从而提高字节输入流读取数据的性能 public BufferedOutputStream(OutputStream os) 可以把低级的字节输出流包装成一个高级的缓冲字节输出流,从而提高写数据的性能 1.字节缓冲流为什么提高了操作数据的性能
- 字节缓冲流自带8KB缓冲区
- 可以提高原始字节流、字符流读写数据的性能
2.推荐使用那种方式提高字节流读写数据的性能?
- 建议使用字节缓冲输入流、字节缓冲输出流,结和字节数组的方式,目前看来是性能最优的组合
字符缓冲流
- 字符缓冲输入流:BufferedReader
- 作用:提高字符输入流读取数据的性能,除此之外多了按照行读取数据的功能。
构造器 说明 public BufferedReader(Reader r) 可以把低级的字符输入流包装成一个高级的缓冲字符输入流管道,从而提高字符输入流读数据的性能 字符缓冲输入流新增功能
方法 说明 public String readLine() 读取一行数据返回,如果读取没有完毕,无行可读返回NULL - 字符缓冲输出流:BufferedWriter
- *** 作用:提高字符输出流写取数据的性能,除此之外多了换行功能***
构造器 说明 pblic BufferedWriter(Writer w) 可以把低级的字符输出流包装成一个高级的缓冲字符输出流管道,从而提高字符输出流写数据的性能 方法 说明 public void newLine() 换行操作 #### 转换流
- 字符缓冲输入流:BufferedReader
字符输入转换流
字符输入转换流:InputStreamReader,可以把原始的字节流按照指定编码转换成字符输入流
构造器 说明 public InputStreamReader(InputStream is) 可以把原始的字节流按照代码默认编码转换成字符输入流。几乎不用,与默认的FileReader一样 public InputStreamReader(InputStream is,String charset) 可以把原始的字节流按照指定编码转换成字符输入流,这样字符流中的字符就不会乱码了(重点) package com.yu.Day1006Demo; import java.io.*; public class InputStreamReaderDemo01 {
public static void main(String[] args) throws Exception {
try (
// Reader isr = new FileReader("C:\\Users\\DELL\\Desktop\\yujava\\image\\ceshi.txt");
/**运行结果
*abc come��ιabc come��ι
* abc come��ι
* abc come��ι
* abc come��ι
* abc come��ι
* abc come��ι
* abc come��ι
* 产生乱码
* 原因:编码格式为Utf-8,读取的文件格式为GBK需要转换格式
*/
InputStream is = new FileInputStream("C:\\Users\\DELL\\Desktop\\yujava\\image\\ceshi.txt");
Reader isr = new InputStreamReader(is,"GBK");
BufferedReader br = new BufferedReader(isr);
){
String Str;
while((Str = br.readLine()) != null){
System.out.println(Str);
}
}
catch (Exception e) {
e.printStackTrace();
}
}}
abc come的喂abc come的喂
abc come的喂
abc come的喂
abc come的喂
abc come的喂
abc come的喂
abc come的喂
字符输入转换流
- OutputStreamWriter
- 可以把字节输出流按照指定编码转换成字符输出流
| 构造器 | 说明 |
|---|---|
| public OutputStreamWriter(OutputStream os) | 可以把原始的字节输出流按照代码默认编码转换成字符输出流,几乎不用 |
| public OutputStreamWriter(OutputStream os,String charset) | 可以把原始的字节输出流按照代码默认编码转换成字符输出流 |
对象序列化
- 作用:以内存为基准,把内存 中的对象存储到磁盘文件中去,称为对象序列化
- 使用到的流是对象字节输出流:ObjectOutputStream
| 构造器 | 说明 |
|---|---|
| public ObjectOutputStream(OutputStream out) | 把低级字节输出流包装成高级的对象字节输出流 |
ObjectOutputStream序列化方法
| 方法名称 | 说明 |
|---|---|
| public final void writeObject(Object obj) | 把对象写出去到对象序列化流的文件中去 |
注意事项
1.对象如果需要序列化,必须实现Serializable序列化接口
2.但想要某个数据不参与序列化时前面在创建对象的时候加
transinent修饰的成员变量不参与序列化
对象反序列化
- 使用到的流是对象字节输入流,:ObjectInputStream
- ***作用:以内存为基准,把存储到磁盘文件中去的对象数据恢复成内存中的对象,称为对象反序列化
| 构造器 | 说明 |
|---|---|
| public ObjectInputStream(InputStream out) | 把低级字节输入流包装成高级的对象字节输入流 |
ObjectInputStream序列化方法
| 方法名称 | 说明 |
|---|---|
| public Object readObject() | 把存储到磁盘文件中去的对象数据恢复成内存中的对象返回 |
注意事项
- 声明序列化版本号
序列化的版本号与反序列化的版本号一致才不会出错
private static final long seriolVer
打印流
- 作用:打印流可以实现方便、高效的打印数据到文件中去。
- 打印流一般是指:PrintStream,PrintWriter两个类
PrintStream
| 构造器 | 说明 |
|---|---|
| public PrintStream(OutputStream os) | 打印流直接通向字节输出流管道 |
| public PrintStream(File f) | 打印流直接通向文件对象 |
| public PrintStream(String filepath) | 打印流直接通向文件路径 |
| 方法 | 说明 |
|---|---|
| public void print(XXX xxx) | 打印任意类型的数据出去 |
PrintWrite
| 构造器 | 说明 |
|---|---|
| public PrintWriter(OutputStream os) | 打印流直接通向输出流管道 |
| public PrintWriter(Writer w) | 打印流直接通向字符输出流管道 |
| public PrintWriter(File f) | 打印流直接通向文件对象 |
| public PrintWriter(String filepath) | 打印流直接通向文件路径 |
| 方法 | 说明 |
|---|---|
| public void print(XXX xxx) | 打印任意类型的数据出去 |
PrintStream和PrintWriter的区别
- 打印数据功能上是一模一样的,都是使用方便,性能高效(核心优势)
- PrintStream继承自字节输出流OutputStream,支持写字节数据的方法
- PrintWriter继承字符输出流Writer,支持写字符数据出去
总结
1.打印流有几种?各有什么优点?
- 打印流一般是指:PrintStream,PrintWriter两个类
- 打印功能两者是一样的使用方式
- PrintStream继承自字节输出流OutputStream,支持写字节
- PrintWriter继承自字符输出流Writer,支持写字符
2.打印流的优势是什么
- 两者在打印功能上都是使用方便,性能高效(核心优势)
输出重定向
//改变文件输出语句的位置
PrintStream ps = new PrintStream("输出文件位置");
System。setOut(ps);
补充知识
Properties属性集对象
- 其实就是一个Map集合,但是一般不会当集合使用,因为HashMap更好用
Properties核心作用
- Properties代表的是一个属性文件,可以把自己对象中的键值对学习存入到一个属性文件中去。
- 属性文件:后缀是.properties结尾的文件,里面内容都是key=value,后续做系统配置信息的。
Properties的API
- Properties和IO流结和的方法
| 构造器 | 说明 |
|---|---|
| void load(InputStream inStream) | 从输入字节流读取属性列表(键和元素对) |
| void load(Reader reader) | 从输入字符流读取属性列表(键和元素对) |
| void store(OutputStream out,String comments) | 将此属性列表(键和元素对)写入此Properties表中,以适合于使用load(InputStream)方法的格式写入输出字节流 |
| void store(Writer writer,String comments) | 将此属性列表(键和元素对)写入此Properties表中,以适合使用load(Reader)方法的格式写入输出字符流 |
| public Object setProperty(String key,String value) | 保存键值对(put) |
| public String getProperty(String key,String value) | 使用此属性列表中指定的键搜索属性值(get) |
| public Set StringPropertyNames() | 所有键的名称集合(keyset) |
存储
package com.yu.Day1006Demo;
import java.io.FileWriter;
import java.util.Properties;
public class PropertiesDemo01 {
public static void main(String[] args) throws Exception{
Properties properties = new Properties();
properties.setProperty("admin","admin");
properties.setProperty("yu","xiao");
properties.setProperty("xiao","yu");
System.out.println(properties);
/**
* 参数一:保存管道 字符输出流管道
* 参数二:保存心得
*/
properties.store(new FileWriter("src\\user.properties"),"100");
}
}
读取
package com.yu.Day1006Demo;
import java.io.FileReader;
import java.util.Properties;
public class PropertiesDemo02 {
public static void main(String[] args)throws Exception {
Properties properties = new Properties();
System.out.println(properties);
//将存储到user.properties文件内地内容读取出来
properties.load(new FileReader("src\\user.properties"));
System.out.println(properties);
String rs = properties.getProperty("yu");
System.out.println(rs);
String rs1 = properties.getProperty("xiao");
System.out.println(rs1);
}
}
作用
- 可以存储Properties属性集的键值对数据到属性文件中去
- void store(Writer writer,String comments)
- 可以加载属性文件中的数据到Properties对象中来
- void load(Reader reader)
IO框架
commons-io 概述
- commons-io是apache开源基金组织提供的一组有关IO操作的类库,可以提高IO功能开发的效率。
- commons-io工具包提供了很多有关io操作的类 。有两个主要的类FileUtils,IOUtils
FileUtils主要有如下方法:
| 方法名 | 说明 |
|---|---|
| String readFileToString(File file,String encoding) | 读取文件中的数据,返回字符串 |
| void copyFile(File srcFile,File destFile) | 复制文件 |
| void copyDirectoryToDirectory(File srcDir,File destDir) | 复制文件夹 |
下载网址https://commons.apache.org/proper/commons-io/download_io.cgi
heimaJava17的更多相关文章
随机推荐
- matlab求解器的选择
可以选择的变步长求解器有:ode45,ode23,ode113,odel5s,ode23s和discret.缺省情况下,具有状态的系统用的是ode45:没有状态的系统用的是discrete. 1)od ...
- IDEA 开发SSM
1.配置MAVEN 2.初始化SpringBoot 官网API:https://spring.io/projects/spring-boot 初始化SpringBoot:https://start.s ...
- mysql命令行如何执行sql脚本
本文介绍在windows操作系统和Linux操作系统中,如何在命令界面模式下执行对应的sql脚本到mysql数据库 Windows操作系统下 mysql -u root -p db1 < E:\ ...
- 渲染杂谈:early-z、z-culling、hi-z、z-perpass到底是什么?
之前一直被这几个和深度缓存(z-buffer)相关的概念搞得神魂颠倒.今天在翻阅<Real-Time Rendering>时碰巧碰巧看到了这部分的讲解.硬着头皮看了看,姑且算是讲几个概念分 ...
- linux查看指定时间段日志
1.查看时间段日志:sed -n '/起始时间/,/结束时间/p' 日志文件 sed -n '/2021-05-21 10:08/,/2021-05-21 10:09/p' nohup.out2.指定 ...
- 实践:腾讯云COS备份本地数据以及异地备份
在当前大数据时代背景下,数据在业务中占有不可低估的地位,数据备份已然成为了最后一道屏障. 腾讯云对象存储COS,提供数据备份.共享.大数据处理.线上数据托管一站式解决方案,成为了不少企业和个人用户备份 ...
- Mysql数据库基础第二章:(九)分页查询
Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...
- ABAP 物料主数据 屏幕增强按钮
首先看效果,目标是在物料主数据中 基础数据页面新增一个按钮来满足跳转需求,这里以跳转百度为例 页面效果如下: 创建定制程序 事务代码 SPRO,路径:后勤-常规 -> 物料主数据 -> 配 ...
- Decal Buffer相关
延迟渲染与前向渲染 前向渲染或叫正向渲染,每一个图元都经过顶点着色器,图元着色器,片段着色器,在片段着色器内连同光照一起计算,效率和图元数量有关. 延迟渲染会先计算出G-BUFFER,就是不含光照计算 ...
- Java方法之方法的重载
方法的重载 重载就是在一个类中,有相同的函数名称,但形参不同的函数. 方法的重载的规则: 1.方法名称必须相同. 2.参数列表必须不同(个数不同.或类型不同.参数排列顺序不同等). 3.方法的返回类型 ...