Java学习路线(19)——IO流(下)

news2024/11/20 7:21:09

一、缓冲流

1、概念: 一种自带缓冲区的字节流、可提高原始字节流、字符流读写数据的性能。

2、缓冲流高性能原理: 磁盘与内存之间有一块存储区域,当磁盘向内存传输数据时,先传输到缓冲区,当缓冲区满了之后,一起传输给内存中,如图所示。
在这里插入图片描述
3、缓冲流类型

  • BufferedInputStream 字节缓冲输入流
  • BufferedOutputStream 字节缓冲输出流
  • BufferedReader 字符缓冲输入流
  • BufferedWriter 字符缓冲输出流

4、字节缓冲流性能优化原理: 字节缓冲流自带8KB缓冲池,以便我们读取写入数据。

5、创建缓冲流API

构造器说明
BufferedInputStream(InputStream in)为指定字节输入流创建缓冲区
BufferedInputStream(InputStream in,int size)为指定字节输入流创建指定大小的缓冲区
BufferedOutputStream(OutputStream in)为指定字节输出流创建缓冲区
BufferedOutputStreamStream(OutputStream in,int size)为指定字节输出流创建指定大小的缓冲区
BufferedReader(Reader in)为指定字符输入流创建缓冲区
BufferedReader(Reader in,int size)为指定字符输入流创建指定大小的缓冲区
BufferedWriter=(Writer in)为指定字符输出流创建缓冲区
BufferedWriterStream(Writer in,int size)为指定字符输出流创建指定大小的缓冲区

缓冲字符流新增API

方法说明
String readLine()读取文本的一行
public class BufferedStreamDemo{
	public static void main(String[] args) {
		try(
				/*1、创建字符缓冲输入流*/
				BufferedReader br = new BufferedReader(new FileReader("D:\\JavaBase\\JavaSEpro\\src\\com\\zengoo\\logback\\loco.txt"));
				) {
			while(br.ready()){
				System.out.println(br.readLine());
			}
			System.out.println("复制完整");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}
}

二、转换流

1、概念: 由于不同编码会导致读取乱码问题,所以转换流能够转换成指定编码的输入流。

2、类型

  • InputStreamReader 字符输入转换流
  • OutputStreamReader 字符输出转换流

3、获取转换流

构造器说明
InputStreamReader(InputStream is)把原始字节流按照代码默认编码转换成字符输入流
InputStreamReader(InputStream is, String charset)把原始字节流按照指定编码转换成字符输入流
OutputStreamWriter(OutputStream is)把原始字节流按照代码默认编码转换成字符输出流
OutputStreamReader(OutputStream is, String charset)把原始字节流按照指定编码转换成字符输出流

三、序列化与反序列化

1、对象序列化的概念: 以内存为基准,把内存中的对象存储到磁盘文件中,称为序列化,反之则为反序列化
2、对象字节IO流:

  • ObjectInputStream

(1)获取输入流

构造器说明
ObjectInputStream(InputStream out)把低级字节输入流包装成高级的对象字节输入流

(2)写入输入流

方法说明
void readObject()把对象从流中读出

反序列化对象

public class ObjectOutputStreamDemo {
    public static void main(String[] args) {
        /*1、空对象*/
        User user = new User();
        try (
                /*2、创建对象字节流*/
                ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\JavaBase\\JavaSEpro\\src\\com\\zengoo\\logback\\out.txt"));
        ){
            user = (User) ois.readObject();
            System.out.println(user);

        } catch (IOException | ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}

/*打印输出*/
User{id='9fd3f9ea-2783-4327-bdd3-b10e7683d59a', username='Administrator', password='asfdsgasdfdEW1245EWFC', age=25}
  • ObjectOutputStream

获取输出

构造器说明
ObjectOutputStream(OutputStream out)把低级字节输出流包装成高级的对象字节输出流

写入数据

方法说明
void writeObject(Object obj)将对象序列化输出至流中

序列化对象

public class ObjectOutputStreamDemo {
    public static void main(String[] args) {
        /*1、对象初始化*/
        User user = new User(UUID.randomUUID().toString(),"Administrator","asfdsgasdfdEW1245EWFC",25);
        try (
                /*2、创建对象字节流*/
                ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\JavaBase\\JavaSEpro\\src\\com\\zengoo\\logback\\out.txt"));
        ){
            /*3、写入文件*/
            oos.writeObject(user);
            System.out.println("序列化完成");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

/*实现Serializable接口才能序列化*/
class User implements Serializable{
    private String id;
    private String username;
    private String password;
    private int age;

    public User() {
    }

    public User(String id, String username, String password, int age) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

out.txt

�� sr com.zengoo.logback.User8�b�Xy� I ageL idt Ljava/lang/String;L passwordq ~ L usernameq ~ xp   t $9fd3f9ea-2783-4327-bdd3-b10e7683d59at asfdsgasdfdEW1245EWFCt 
Administrator

注意: 若对象中有属性不希望被序列化,则添加transient关键字声明


四、打印流

1、概念: 打印流实现方便、高效的在文件中写入数据。

2、类型

  • PrintStream(支持字节打印)
构造器说明
PrintStream(OutputStream out)打印流直接通向字节输出流管道
PrintStream(File f)打印流直接通向文件对象
PrintStream(String apth)打印流直接通向文件路径
方法说明
void print(E e)打印任何类型的数据

打印数据到文件示例

public class PrintDemo {
    public static void main(String[] args) {
        try(
                /*1、创建打印流*/
                PrintStream printStream = new PrintStream("D:\\JavaBase\\JavaSEpro\\src\\com\\zengoo\\logback\\out.txt");
        ) {
            printStream.println("东临碣石".toCharArray());
            printStream.println("以观沧海".toCharArray());
            printStream.println("水何澹澹".toCharArray());
            printStream.print("山岛竦峙".toCharArray());
            System.out.println("打印完毕");
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}

out.txt

东临碣石
以观沧海
水何澹澹
山岛竦峙
  • PrintWriter(支持字符打印)
构造器说明
PrintWriter(OutputStream out)打印流直接通向字节输出流管道
PrintWriter(Writer writer)打印流直接通向字符输出流管道
PrintWriter(File f)打印流直接通向文件对象
PrintWriter(String apth)打印流直接通向文件路径
方法说明
void print(E e)打印任何类型的数据

3、输出语句重定向(打印流的应用)

主要用于将控制台打印的语句输出到文件中保存。

PrintStream ps = new PrintStream("文件地址");
System.setOut(ps)

五、Propertis

1、概念: Propertis 意思是 属性,所以它虽然是隶属于集合类,但通常不用它作为集合使用。
2、作用: Propertis代表一个属性文件,可以将自己的键值对信息存入到数据文件中去。
3、Propertis常用API

方法说明
void load(InputStream inStream)从输入字节流中读取属性列表(键值对)
void load(Reader reader)从输入字节流中读取属性列表(键值对)
void store(OutputStream out, String comments)将此属性列表写入此Propertis列表中,以适用于使用load(InputStream) 方法的格式写入输出字节流
void store(Writer writer, String comments)将此属性列表写入此Propertis列表中,以适用于使用load(InputStream) 方法的格式写入输出字符流
Object setProperty(String key, String value)保存键值对(put)
String setProperty(String key)使用键搜索属性值(get)
Set<String> stringPropertiesNames()所有键名集合(keySet())

使用Properties示例

public class PropertiesDemo {
    public static void main(String[] args) throws IOException {
        /*创建属性集合*/
        Properties properties = new Properties();
        properties.setProperty("id","123");
        properties.setProperty("username","Admin");
        properties.setProperty("password","avtbhn324t@");
        properties.setProperty("sex","male");
        System.out.println(properties);

        /*保存管道*/
        properties.store(new FileWriter("D:\\JavaBase\\JavaSEpro\\src\\com\\zengoo\\logback\\users.properties"),"It's user base-info");
    }
}

/*打印输出*/
{password=avtbhn324t@, sex=male, id=123, username=Admin}

users.properties

#It's user base-info
password=avtbhn324t@
sex=male
id=123
username=Admin

加载Properties文件

public class PropertiesLoadDemo {
    public static void main(String[] args) throws IOException {
        Properties properties = new Properties();
        properties.load(new FileReader("D:\\JavaBase\\JavaSEpro\\src\\com\\zengoo\\logback\\users.properties"));
        System.out.println(properties);
    }
}

/*打印输出*/
#It's user base-info
password=avtbhn324t@
sex=male
id=123
username=Admin

获取Properties中的数据

public class PropertiesGet {
    public static void main(String[] args) throws IOException {
        Properties properties = new Properties();
        properties.load(new FileReader("D:\\JavaBase\\JavaSEpro\\src\\com\\zengoo\\logback\\users.properties"));
        /*根据键值获取值*/
        System.out.println(properties.getProperty("username"));
        System.out.println(properties.getProperty("password"));
        /*获取所有键名*/
        System.out.println(properties.stringPropertyNames());
    }
}

/*打印输出*/
Admin
avtbhn324t@
[password, sex, id, username]

六、IO框架——commons-io

具体的API查看commons-io的技术文档。

1、概述: commons-io是apache开源基金组织提供的一组有关IO操作的类库,可以提高IO功能开发的效率。

2、主要类

  • FileUtils

常用API

方法说明
String readFileToString(File file, String encoding)读取文件中的数据,返回字符串
void copyFile(File srcFile, File destFile)复制文件
void copyDirectoryToDirectory(File srcFile, File destDir)复制文件夹
  • IOUtils

3、使用commons-io
(1)下载commons-io-xx.jar
(2)加载到项目中
(3)导包使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/591331.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[强网杯 2019]随便注 1【SQL注入】解析过程

1.首先启动并访问靶机&#xff0c;有一个输入框&#xff0c;随便输入1 or 1 1&#xff0c;测试一下是否存在sql注入。 2.提交后提示error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syn…

chatgpt赋能python:Python中的_--了解这个神秘的下划线

Python中的_ – 了解这个神秘的下划线 Python是一种流行的编程语言&#xff0c;它具有简单易学的语法和强大的功能。一些Python的特殊语法经常会让初学者感到困惑。其中&#xff0c;一个神秘的下划线符号在Python中出现的频率非常高&#xff0c;而且它的含义和使用也非常多样化…

chatgpt赋能python:Python中符号的用法

Python中符号的用法 在Python编程中&#xff0c;符号是非常重要的一部分。通过合理使用符号&#xff0c;我们可以轻松地实现许多功能和操作。下面是Python中一些常用的符号的介绍和用法。 赋值符号 斜杠等于号&#xff08;&#xff09;被用来赋值。例如&#xff0c;如果我们要…

Windows的Powershell终端增强

Ubuntu上一直用的Oh My Zsh强化终端&#xff0c;体验非常nice。最近在Win上做东西比较多&#xff0c;于是也想把Powershell这个简陋的终端加强一下。 说干就干&#xff0c;网上查了一圈&#xff0c;发现大部分人用Oh My Posh来操作&#xff0c;因此试了一下&#xff0c;发现卡…

UFS 1-UFS架构简介1

UFS 1-UFS架构简介 1 UFS是什么&#xff1f;1.1 UFS1.2 一般特征1.2.1 Target performance1.2.2 Target host applications1.2.3 Target device types1.2.4 Topology1.2.5 UFS Layering 1.3 Interface Features1.3.1 Three power supplies1.3.2 Signaling as defined by [MIPI-…

Linux系统下imx6ull QT编程—— C++类和对象(三)

Linux QT编程 文章目录 Linux QT编程一、类和对象 一、类和对象 C 在 C 语言的基础上增加了面向对象编程&#xff0c;C 支持面向对象程序设计。类是 C 的核心特性&#xff0c;通常被称为用户定义的类型。类用于指定对象的形式&#xff0c;它包含了数据表示法和用于处理数据的方…

C++ 函数对象 详解

目录 &#x1f914;函数对象&#xff1a; &#x1f914;本质&#xff1a; &#x1f914;特点&#xff1a; 代码示例&#xff1a; 运行结果&#xff1a; &#x1f914; 内置函数对象&#xff1a; 1.算数仿函数 代码示例&#xff1a; 运行结果&#xff1a; 2.关系仿函数 …

四轴姿态解算-imu算法

理论篇 欧拉角四元数方向余弦矩阵 强调三者描述的是坐标系A,A之间的变换关系 欧拉角&#xff0c;四元数&#xff0c;方向余弦矩阵都可以描述四轴的姿态变换 注意这里强调的是变换 三者转换公式 一阶龙格库塔法 核心要点简介: 假设一阶函数随时间关系如: y a * T1b 则,在经…

chatgpt赋能python:Python中-1的用法介绍

Python中-1的用法介绍 什么是-1&#xff1f; 在Python中&#xff0c;-1是一个特殊的索引值&#xff0c;它表示从序列的末尾开始向前数1个元素。这在对于列表、字符串、元组等序列类型进行操作时非常有用。 如何使用-1&#xff1f; 假设我们有一个列表&#xff1a; l [1, …

达梦数据库8安装教程

第一步&#xff1a;双击驱动 注意&#xff1a;如果双击显示没有驱动&#xff0c;则安装WinCDEmu软件。 第二步&#xff1a;双击setup.exe安装包 第三步&#xff1a;选择时区 第四步&#xff1a;验证key文件 因为我们是免费试用&#xff0c;所以没有key文件&#xff0c;直接下一…

14:00面试,14:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…

【第二节】变量和简单的数据类型

本节将结束python当中的变量和一部分数据类型(字符串和数字),并且介绍一些对应的方法 变量 在上一节的最后我们打印出了hello world print(hello world!)这次我们使用下面的代码实现一样的功能 message = hello world! print(message)可以看到 打印结果一模一样,而我们…

什么是IPAM?如何使用IPAM来管理IP地址和DHCP?

在计算机网络中&#xff0c;IPAM&#xff08;IP Address Management&#xff09;是一种用于管理IP地址和DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;的工具或系统。IPAM旨在简化和集中管理IP地址分配、子网划分和DHCP配置等任务。本文将详细介绍IPAM的概…

MVC 接收不到参数? —— 看我如何给你安排得明明白白

文章结构 问题背景&#xff1a;问题处理总结 问题背景&#xff1a; 现有如下代码&#xff1a; PostMapping(value "/payment/create") ResponseBody public CommonResult create(Payment payment) {}乍眼看去是不是很好&#xff0c;至少没啥问题很自然&#xff0c…

关于VUE3的一些基础知识点笔记

关于VUE3的一些基础知识点笔记 VUE3 vue2与vue3的一个重要区别是vue2是选项式API&#xff08;composition API&#xff09;而vue3是组合式API&#xff08;option API&#xff09;。 组合式API就是所有逻辑都在setup函数中&#xff0c;使用ref、watch等函数来组织代码&#xff…

使用HTTP协议在k780网站上获取天气-----天气预报

文章目录 项目介绍一、项目任务二、项目流程规划以及代码实现1.总流程2.引入库3.总体流程相关函数 三、功能函数的实现1. TCP函数2. 输入城市信息3. 查询今天天气4. 查询未来一周天气5. 查询历史天气6. 退出 总结 项目介绍 本期主要使用TCP网络编程实现天气预报的功能&#xff…

基于Html5的在线资料库的设计与实现(asp.NET,SQLServer)

在线资料库系统采用.NET开发平台进行开发&#xff0c;开发工具采用Microsoft Visual Studio 2010集成开发环境&#xff0c;后台编程语言采用C#编程语言来进行编程开发&#xff0c;数据库我们采用当下流行的SQL Server 2008数据库管理系统来存放平台中的数据信息&#xff0c;整个…

【Windows设置篇】字符集-简繁体的切换

【Windows设置篇】字符集-简繁体的切换 微软自带键盘&#xff0c;有次傻啦吧唧的一直找繁体切换简体的方法&#xff0c;进设置里面切换地区&#xff0c;更换地址也不行&#xff0c;后面才发现是在"字符集"里面切换—【蘇小沐】 文章目录 【Windows设置篇】字符集-简…

Maven jar 包下载失败问题处理【配置Maven国内源】

前言 很多同学在Maven里下载一些依赖的时候&#xff0c;即下载【jar 包】的时候总是会出现一些问题&#xff0c;这里专门做一个教程讲解一下 其实这和你的Maven配置是有关系的&#xff0c;因为Maven是一个国际站点&#xff0c;它的仓库是在国外的&#xff0c;所以我们有时候在下…

【C++】函数高级 - 默认参数,占位参数,函数重载基本语法,函数重载注意事项

No.Contents1【C】基础知识 - HelloWorld&#xff0c;注释&#xff0c;变量&#xff0c;常量&#xff0c;关键字&#xff0c;标识符2【C】数据类型 - 整型&#xff0c;sizeof&#xff0c;实型&#xff0c;字符型&#xff0c;转义字符&#xff0c;字符串类型&#xff0c;布尔类型…