当前位置: 首页 > news >正文

Java_IO流学习

IO流

概念

I – in – 输入(读)

O – out – 输出(写)

流 – 一点一点的像水流一样去传输数据

注意:站在程序的角度去看待输入还是输出

分类

按照方向分流:输入流、输出流

按照单位分流:字节流、字符流

按照功能分流:基础流/节点流、处理流

注意:new 处理流(new 基础流) – 装饰者模型 – 处理流对象中往往包含了基础流的对象,在基础流的基础上拓展了额外的功能,使得流更为强大(效率),工作中一般使用处理流

存储单位

1024byte = 1KB

1024KB = 1MB

1024MB = 1GB

1024GB = 1TB

1024TB = 1PB

注意:进制1024

学习注意事项

  1. 按照流的发展历史去学习
  2. 注意流与流之间的继承关系
  3. 举一反三

字节流

应用场景:操作二进制数据(音频、视频、图片)

abstract class InputStream – 字节输入流的基类(抽象类)

abstract class OutputStream – 字节输出流的基类(抽象类)

class FileInputStream extends InputStream – 文件字节输入流

class FileOutputStream extends OutputStream – 文件字节输出流

class FilterInputStream extends InputStream – 过滤器字节输入流

class FilterOutputStream extends OutputStream – 过滤器字节输出流

class BufferedInputStream extends FilterInputStream – 带缓冲区的字节输入流

class BufferedOutputStream extends FilterOutputStream – 带缓冲区的字节输出流

默认缓冲区大小:8192字节 - new byte[8192]

字符流

应用场景:操作纯文本数据

注意:字符流 = 字节流+编译器

编译器:可以识别中文字符和非中文字符,非中文字符获取1个字节(一个字节=一个字符),编译器会根据编码格式获取中文字符对应的字节数(GBK获取两个字节,UTF-8获取三个字节)

abstract class Reader – 字符输入流的基类(抽象类)

abstract class Writer – 字符输出流的基类(抽象类)

class InputStreamReader extends Reader – 字符输入转换流

class OutputStreamWriter extends Writer – 字符输出转换流

特点:将字节流转换为字符流,字符转换流是字节流和字符流的桥梁

class FileReader extends InputStreamReader – 文件字符输入流

class FileWriter extends OutputStreamWriter – 文件字符输出流

class BufferedReader extends Reader – 带缓冲区的字符输入流

class BufferedWriter extends Writer – 带缓冲区的字符输出流

默认缓冲区:8192字符 – new char[8192]

各种流

对象流

class ObjectInputStream – 对象输入流

class ObjectOutputStream – 对象输出流

理解:

​ 将程序中的对象写入到文件

​ 并且从文件中读取出对象到程序里

序列化(钝化):将程序里的对象写入到文件

反序列化(活化):将文件里的对象读取到程序中

注意:

  1. 如果对象想写入文件,对象所属的类就必须实现序列化接口(Serializable)
  2. Serializable序列化接口没有任何的属性和方法,这种接口称之为标记型接口
  3. 对象所属的类实现了序列化接口一定要添加序列化ID(serialVersionUID)
  4. 属性使用transient修饰,该属性不会随着对象而写入到文件中

内存流

class ByteArrayInputStream – 内存输入流

class ByteArrayOutputStream – 内存输出流

注意:

  1. 内存流是程序和内存交互,跟文件无关
  2. 内存流是程序到内存的通道,是关闭不掉的

应用场景:项目中频繁使用的数据可以使用内存流备份一份

打印流

class PrintStream – 字节打印流

class PrintWriter – 字符打印流

注意:打印流实际上就是输出流,只有一个方向(程序->文件)

PrintStream vs PrintWriter

区别1:PrintStream是以字节为单位,PrintWriter是以字符为单位

区别2:

​ PrintStream:将字节流转换为字节打印流

​ PrintWriter:将字节流和字符流转换为字符打印流

重定向

理解:重新定义系统标准的输入流、输出流、错误输出流的方向

System.in:获取系统标准输入流的方向(控制台->程序)
System.out:获取系统标准输出流的方向(程序->控制台)
System.err:获取系统标准错误输出流的方向(程序->控制台)

//重定向:重新定义系统标准输入流的方向(文件->程序)
System.setIn(new FileInputStream(“io.txt”));

//重定向:重新定义系统标准输出流的方向(程序->文件)
System.setOut(new PrintStream(new FileOutputStream(“io.txt”,true)));

//重定向:重新定义系统标准错误输出流的方向(程序->文件)
System.setErr(new PrintStream(new FileOutputStream(“io.txt”,true)));

随机访问流

class RandomAccessFile

理解:该流认为文件是一个大型的byte数组。有一个隐藏的指针(默认为0),其实就是下标,可以从指针的位置写入或读取,意味着该流两个方向

模式:r-读,rw-读写

提升作业:

流的大类:BIO、NIO、AIO

学习NIO和AIO,制作md文档,其中包含概念、理解和代码

相关文章:

  • GESP 四级冲刺训练营(1):字符串
  • linux内核符号表
  • 踩坑——纪实
  • VUE 页面生命周期基本知识点
  • 瑞芯微RV1126——ffmpeg环境搭建
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice 国产版在线编辑word文件,同时保存数据和文件
  • Springboot 自定义线程池 ThreadPoolTaskExecutor
  • 标准库算法
  • Android 观察者模式(OBSERVER)应用详解
  • Spring与Netty底层源码解析
  • 一个基于HOOK机制的微信机器人
  • 论文阅读--ViLD
  • 力扣226. 翻转二叉树(DFS的两种思路)
  • 开源模型应用落地-模型量化-Qwen1.5-7B-Chat-GPTQ-Int8(一)
  • 初见flyway
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 《Java编程思想》读书笔记-对象导论
  • CSS实用技巧
  • golang 发送GET和POST示例
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Median of Two Sorted Arrays
  • Python3爬取英雄联盟英雄皮肤大图
  • Vue2.0 实现互斥
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 那些年我们用过的显示性能指标
  • 七牛云假注销小指南
  • 前端知识点整理(待续)
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 移动端唤起键盘时取消position:fixed定位
  • 自定义函数
  • ionic异常记录
  • ​第20课 在Android Native开发中加入新的C++类
  • #面试系列-腾讯后端一面
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (八)Spring源码解析:Spring MVC
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (四)鸿鹄云架构一服务注册中心
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)创业家杂志:UCWEB天使第一步
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET CORE Aws S3 使用
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net 后台导出excel ,word
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NET企业级应用架构设计系列之技术选型
  • .NET实现之(自动更新)
  • /etc/fstab 只读无法修改的解决办法
  • /run/containerd/containerd.sock connect: connection refused
  • [ Linux ] git工具的基本使用(仓库的构建,提交)