我爱Java系列之《JavaEE学习笔记day12》---【缓冲流、转换流、序列/反序列化流、打印流】

2023-11-05

一.缓冲流
1.字节缓冲输出流java.io.BufferedOutputStream extends OutputStream 高效字节输出流 写入文件 目标文件
底层定义个了一个长度为8192的数组,提高效率
常用方法:

			write(int b): 写单个字节
			write(byte[] bs): 写一个字节数组
			write(byte[] bs,0,len): 写一个字节数组
			BufferedOutputStream 的构造方法:
			BufferedOutputStream(OutputStream out)
				参数:
					OutputStream out: 字节输出流的抽象父类
					传递子类对象: FileOutputStream

注意:
(1)高效缓冲流而言,千万不要使用flush方法
(2)只需要关闭高效缓冲流就可以,不用关闭它所关联的其它流对象
2.字节缓冲输入流
java.io.BufferedInputStream extends InputStream 高效字节输入流 读取文件 源文件
底层定义个了一个长度为8192的数组,提高效率
常用方法:

        int read(): 读取一个字节
        int read(byte[] bs): 读取一个字节数组

BufferedInputStream 构造方法:

			BufferedInputStream(InputStream in)
				参数:
					 InputStream in 字节输入流的抽象父类
						传递子类对象 FileInputStream

3.字符缓冲输出流
java.io.BufferedWriter extends Writer 高效字符输出缓冲流 写文件 目标文件
底层定义了长度为8192的数组,提高效率
常用的方法:

		write(int ch): 写一个字符
		write(char[] chs): 写一个字符数组
		write(char[] chs,0,len): 写字符数组的一部分
		write(String str): 写一个字符串
		write(String str,0,len): 写字符串的一部分

特有方法:
newLine(): 写一个自适应平台的换行符

    java.io.BufferedWriter 构造方法
        BufferedWriter(Writer w):
            参数:
                Writer w 字符输出流的抽象父类
                传递FileWriter子类对象

4.字符缓冲输入流
jva.io.BufferedReader extends Reader 高效字符输入缓冲流 读取文件的 源文件
底层定义了长度为8192的数组,提高效率
常用方法:

       int read(): 读取一个字符
       int read(char[] chs): 读取一个字符数组
       ab\r\n

特有方法:
String readLine(): 一次读取一行的内容,以回车换行作为一行的结束标志
但是读取到的内容当中,是不包含回车换行的
遇到文件结束标志,readLine方法返回的是null

	jva.io.BufferedReader 构造方法
       BufferedReader(Reader r):
              参数:
                Reader r 字符输入流的抽象父类
                传递子类对象: FileReader

二.转换流
1.编码表
编码表: 存储字符和数字对应关系的一张表格
编码: 字符 —> 字节
解码: 字节 —> 字符
常用的编码表:
GBK : 中文windows系统默认编码表 GBK
一个汉字占2个字节

UTF-8 : idea项目空间默认编码表 UTF-8
一个汉字占3个字节

如何获取一个字符串对应编码方式的字节数组呢?

		byte[] getBytes() :使用平台的默认字符集(idea项目空间默认编码表 UTF-8)将此 String 编码为 byte 序列
		byte[] getBytes(String charsetName) :使用指定的字符集将此 String 编码为 byte 序列

如何按照指定编码,把字节数组变成字符串?

		String(byte[] bs): 通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String
		String(byte[] bytes, String charsetName): 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。

2.InputStreamReader
java.io.InputStreamReader extends Reader 字节流通向字符流的桥梁,它是一个字符流

    构造方法:
        InputStreamReader(InputStream is):
            参数:
                InputStream is: 字节输入流的抽象父类
                传递子类FileInputStream
                没有指定编码表,采用平台默认编码(idea中utf-8)

         InputStreamReader(InputStream is,String charsetName):
             参数:
                String charsetName: 编码表,常用gbk,utf-8

注意:
FileReader
底层: InputStream + 平台默认编码表
InputStreamReader:
底层: InputStream + 指定编码表

3.OutputStreamWriter
java.io.OutputStreamWriter extends Writer 字符输出流 字符流通向字节流的桥梁
构造方法:

        OutputStreamWriter(OutputStream out)
            参数:
               OutputStream out: 字节输出流的抽象父类
               传递子类FileOutputStream对象
               没有指定编码表,采用平台默认编码表(utf-8)

        OutputStreamWriter(OutputStream out,String charsetName)
            参数:
               OutputStream out: 字节输出流的抽象父类
               传递子类FileOutputStream对象
               没有指定编码表,采用平台默认编码表(utf-8)

            参数:
                String charsetName: 编码表,常用gbk,utf-8

三.序列/反序列化流
1.序列化流
java.io.ObjectOutputStream extends OutputStream 字节输出流 写对象的
常用方法:

        writeObject(Object obj): 把参数对象obj写入到文件中

构造方法:

        ObjectOutputStream(OutputStream out)
            参数:
                OutputStream out: 字节输出流的抽象父类
                传递的是子类对象,FileOutputStream

2.反序列化流
java.io.ObjectInputStream extends InputStream 字节输入流 读取对象的
常用方法:

         Object readObject(): 读取文件中的一个对象,返回形式为Object类型 向上提升
    构造方法:
    
        ObjectInputStream(InputStream is)
            参数:
                InputStream is: 字节输入流的抽象父类
                传递的是子类对象,FileInputStream

3.注意事项
一个类要想实现序列化和反序列化,必须实现接口:
java.io.Serializable : 类通过实现 java.io.Serializable 接口以启用其序列化功能
该接口中,没有抽象方法 称之为 标记型接口

	注意:
		1.被static修饰的成员变量,属于类,不属于对象,所以不能进行序列化
		2.被transient修饰的成员变量,不能进行序列化
		3.对java文件进行编译的时候,会根据成员变量计算出一个数字,序列号
			同时该序列号,在写文件的时候,会被写入到文件中
			只要修改了java文件中的内容,就会重新计算一个新的序列号
			在读取文件时,文件中的序列号和class中的序列号不一致,就会出异常

			解决方案:
				在java类中指定一个固定的序列号,这样,不管如何修改java类,都不需要重新计算序列号了
				public static final long serialVersionUID = 42L;

四.打印流
java.io.PrintStream类 extends OutputStream 字节输出流
特有方法:

        print(...): 原样输出,不换行,不会抛出异常
        println(...): 原样输出,换行,不会抛出异常
    构造方法:
        PrintStream(File file)
        PrintStream(String file)
            参数:
                File/String 类型的文件路径

System类中的set方法

	static void setOut(PrintStream out) 重新分配“标准”输出流。

---------------------------------------吾生也有涯,而知也无涯!----------------------------------------------

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我爱Java系列之《JavaEE学习笔记day12》---【缓冲流、转换流、序列/反序列化流、打印流】 的相关文章

随机推荐

  • Mysql-锁定读(Locking Reads)

    关于读锁 mysql官方文档地址 https dev mysql com doc refman 5 7 en innodb locking reads html与一致性非锁定读 普通读 快照读 对应的就是锁定读 锁定读的用处很多 首先先说下
  • js 高级算法 - 动态规划

    主要是看了 数据结构与算法 有所感悟 虽然这本书被挺多人诟病的 说这有漏洞那有漏洞 但并不妨碍我们从中学习知识 其实像在我们前端的开发中 用到的高级算法并不多 大部分情况if语句 for语句 swith语句等等 就可以解决了 稍微复杂的 可
  • DestroyList() 和ClearList() 一个使用引用,一个直接传参

    在高一凡编写的算法书P20页写着 销毁链表时用了引用 void DestroyList LinkList L LinkList q while L q L gt next free L L q 清空链表没有使用引用 void ClearLi
  • element UI 图片上传/文件上传

  • 2021-04-16

    喜欢西游记的同学肯定都知道悟空偷吃蟠桃的故事 你们一定都觉得这猴子太闹腾了 其实你们是有所不知 悟空是在研究一个数学问题 什么问题 他研究的问题是蟠桃一共有多少个 不过 到最后 他还是没能解决这个难题 呵呵 当时的情况是这样的 第一天悟空吃
  • yarn的常用命令以及与npm的对比

    yarn安装 在yarn的官网下载yarn并安装或者 npm i yarn g 查看版本 Yarn v 1 初始化一个新项目 yarn init 与 npm init 一样通过交互式会话创建一个 package json yarn init
  • 实施工程师的必修课(一)-----项目启动前的知识整理学习-工作流程

    项目启动前的知识整理学习 工作流程 第一步 项目启动 第二步 调研开始 第三步 需求总结 第四步 数据和材料的收集 第五步 需求调研结束 第六步 上线试运行 第七步 项目验收 以lims系统为例 实验室信息管理系统 LIMS Laborat
  • MySQL存储原理

    MySQL中的数据组织是以页为单位的 每一页中的信息包括 页头 记录页面的控制信息 共占56字节 包括页的左右兄弟页面指针 用来连接相邻的页面 页面空间使用情况等 虚记录 最大虚记录 比页内最大主键还大 最小虚记录 比页内最小主键还小 记录
  • chatgpt论文润色

    https github com binary husky chatgpt academic
  • 开源库nothings/stb的介绍及使用(图像方面)

    GitHub上有个开源的stb库 Star数已过万 地址为https github com nothings stb 为何叫stb 是用的作者名字的缩写Sean T Barrett 此库仅包含头文件 除stretchy buffer h外
  • 佛祖保佑 永不宕机 永无BUG C语言 串口打印

    字符串如下 char log oo0oo r n o8888888o r n 88 88 r n r n 0 0 r n r n r n
  • ChromeDriver最新版(116.x及最新)下载途径分享

    首先查看version 在地址栏输入chrome version 最新版 官方地址 https googlechromelabs github io chrome for testing 选择合适的下载即可 Old 官网 https chr
  • 关于postman使用技巧

    一 get方法 只在此显示下有token的查询方法 一般的get查询直接浏览器地址即可 二 post请求 1 在headers中设置下Content Type为application json 2 在Body中输入正确的json格式即可 三
  • 从零实现DevOps(二):Centos7操作系统-环境变量配置(JDK、Maven、Node)

    1 JDK安装并配置环境变量 由于Jenkins官网要求 从2 357版本后必须用java11或17才可以运行 java8运行会报错 所以我们直接安装jdk11 1 下载地址 往下拉可以找到Java11 Java Downloads Ora
  • C语言速成指南

    说明一下吧 这篇文章是用于c语言有目的的速成 有点基础的看一看也可以当复习 如果想要真正学好c语言 建议看一下之前写的详细教程 这篇文章会有很多对于考试没有多大帮助的东西被忽略掉 临近期末祝大家考试顺利 我也会不断完善这篇文章的 欢迎各路大
  • SQLMap 注入 DVWA实战

    一 low级别 1 进入dvwa界面输入1 点击Submit 得到链接 http localhost dvwa master vulnerabilities sqli id 1 Submit Submit 2 我们用sqlmap进行爆破 s
  • springboot 配置多个请求服务代理

    springboot 配置服务代理 有时候 我们可能有下边这样的需求 即 针对于分布式服务 我们会有多种业务接口服务 但是服务器上可能只要求开放一个服务的端口 比如上图的restA项目端口是对外开放的 但是restB项目端口并未对外开放 这
  • StringBuffer与StringBuilder的区别

    StringBuffer与StringBuilder的区别 一 String StringBuffer与StringBuilder String字符串常量 String的值是不可变的 这就导致每次对String的操作都会生成新的String
  • 运算符优先级

    C语言中 运算符除了常见的三大类 算术运算符 关系运算符与逻辑运算符之外 还有一些用于完成特殊任务的运算符 运算符的运算优先级共分为15 级 1 级最高 15 级最低 在表达式中 优先级较高的先于优先级较低的进行运算 而在一个运算量两侧的运
  • 我爱Java系列之《JavaEE学习笔记day12》---【缓冲流、转换流、序列/反序列化流、打印流】

    一 缓冲流 1 字节缓冲输出流java io BufferedOutputStream extends OutputStream 高效字节输出流 写入文件 目标文件 底层定义个了一个长度为8192的数组 提高效率 常用方法 write in