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() 换行操作
      #### 转换流
字符输入转换流
  • 字符输入转换流: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() 把存储到磁盘文件中去的对象数据恢复成内存中的对象返回
注意事项
  1. 声明序列化版本号
  • 序列化的版本号与反序列化的版本号一致才不会出错

  • 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的更多相关文章

随机推荐

  1. matlab求解器的选择

    可以选择的变步长求解器有:ode45,ode23,ode113,odel5s,ode23s和discret.缺省情况下,具有状态的系统用的是ode45:没有状态的系统用的是discrete. 1)od ...

  2. IDEA 开发SSM

    1.配置MAVEN 2.初始化SpringBoot 官网API:https://spring.io/projects/spring-boot 初始化SpringBoot:https://start.s ...

  3. mysql命令行如何执行sql脚本

    本文介绍在windows操作系统和Linux操作系统中,如何在命令界面模式下执行对应的sql脚本到mysql数据库 Windows操作系统下 mysql -u root -p db1 < E:\ ...

  4. 渲染杂谈:early-z、z-culling、hi-z、z-perpass到底是什么?

    之前一直被这几个和深度缓存(z-buffer)相关的概念搞得神魂颠倒.今天在翻阅<Real-Time Rendering>时碰巧碰巧看到了这部分的讲解.硬着头皮看了看,姑且算是讲几个概念分 ...

  5. linux查看指定时间段日志

    1.查看时间段日志:sed -n '/起始时间/,/结束时间/p' 日志文件 sed -n '/2021-05-21 10:08/,/2021-05-21 10:09/p' nohup.out2.指定 ...

  6. 实践:腾讯云COS备份本地数据以及异地备份

    在当前大数据时代背景下,数据在业务中占有不可低估的地位,数据备份已然成为了最后一道屏障. 腾讯云对象存储COS,提供数据备份.共享.大数据处理.线上数据托管一站式解决方案,成为了不少企业和个人用户备份 ...

  7. Mysql数据库基础第二章:(九)分页查询

    Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...

  8. ABAP 物料主数据 屏幕增强按钮

    首先看效果,目标是在物料主数据中 基础数据页面新增一个按钮来满足跳转需求,这里以跳转百度为例 页面效果如下: 创建定制程序 事务代码 SPRO,路径:后勤-常规 -> 物料主数据 -> 配 ...

  9. Decal Buffer相关

    延迟渲染与前向渲染 前向渲染或叫正向渲染,每一个图元都经过顶点着色器,图元着色器,片段着色器,在片段着色器内连同光照一起计算,效率和图元数量有关. 延迟渲染会先计算出G-BUFFER,就是不含光照计算 ...

  10. Java方法之方法的重载

    方法的重载 重载就是在一个类中,有相同的函数名称,但形参不同的函数. 方法的重载的规则: 1.方法名称必须相同. 2.参数列表必须不同(个数不同.或类型不同.参数排列顺序不同等). 3.方法的返回类型 ...