java架构实践_Java架构实践-关于IO流
IO流小总结
IO流的本质就是用于数据的传输,根据流的方向的不同,有输入流、输出流。根据数据类型的不同,又有字节流、字符流。
字节流
字节输入流 InputStream
字节输出流 OutputStream
字节流:主要用来处理字节或二进制对象。例如:视频、音频、图片等。
字符流:主要用来处理字符、字符数组或者字符串文件。例如html、css、txt等
字节流又称万能流,能处理任何文件,但是在处理字符方面不太擅长,于是就有了字符流。
常用的基本方法
void close() 关闭此输出流并且释放所有与此流有关的系统资源
void flush() 刷新此输出流并强制写出所有缓冲的输出字节
void write(byte[] b,int off,int len) 将指定的byte数组中的指定区域写入此输出流
int read(byte [] b) 一次读取一个字节数组并返回一个读取的长度
int read(byte [] b , int off ,int len) 读取一个字节数组的指定区域并返回读取个数
文件的复制,其实质上就是利用流对文件的输入、输出。
利用流的不同,可以有多中复制文件的方式,但是字符流,不能操作图片视频类的文件,否则会导致相应的文件,结构混乱,无法使用。
缓冲流
IO缓冲流比较基本的IO流,更有效率。普通的IO流,每次写入一个字节,就要读取一个字节,效率十分缓慢。若是频繁的读取写入,就会造成效率的低下。缓冲流,则是通过将字节读取出来,然后缓存到内存中去,等读取到一定数量就一起写入。这样就极大了提高了效率。使用缓存流最后必须要使用flush、close释放缓存、关闭IO流。
追加写入
方法:new FileOutputStream(s, true),FileOutputStream的构造方法中,有提供对应的选项。除此之外还有多种追加文本写入的方式。
其他种类的IO流
数据输入、输出流 DataInputStream(InputStream in)/ DataOuputStream(InputStream out)
特点:基本数据类型流是字节流,具备字节流的功能,但是一般数据类型都是一个类的成员变量类的隐私数据。读取顺序必须和写入顺序、类型一致,写入到文件中的数据是不可见的,就是乱码过的。
PrintWriter
向文本输出流打印对象的格式化表示形式。此类实现在PrintStream中的所有Print方法
特点:只能写数据,不能读数据,能够写入任意类型,如果启动了自动刷新,就能实现自动刷新可以不用调用flush(),而且还能够设定写入的编码格式。解决IO 流编码问题。
System类中的静态变量:in、out
“标准”输入流:static InputStream in
“标准”输出流:static PrintStream out
他们各自代表了系统标准的输入输出设备。默认输入设备是键盘、默认的输出设备是显示器(就是控制台)
RandomAccessFile 随机访问文件(可以访问文件的任意位置,并且能在该位置进行读取写入操作)
RandomAccessFile不是IO流,是属于Object的一个子类。
包含了InputStream和OutputStream的功能。
使用时,要设置好权限,即new RandomAccessFile(File file,String “RW”) RW:读写权限
方法seek(Long l) 指定访问文件的开始位置
方法getFilePointer() 返回文件当前指针的位置
方法length() 获取文件的长度
可以通过RandomAccessFile() 每次都在文件末尾进行写入操作,从而完成实时追加写入。
也可以利用每次读取一段,然后写入到其他文件保存的方式来对文件进行分割,再利用合并流,进行重组。
合并流,该流与打印流Print想反,只有读取功能,没有写入功能的流。
SequenceInputStream(FileInputStream fileInputStream1, FileInputStream fileInputStream2)
构造方法,就是放两个输入流进去,然后读取,并使用其他输出流进行写入,就能实现对文件的合并操作。
序列化流和反序列化流 ObjectInputStream/ObjectOutputStream
序列化流:将对象写入到文件当中去
反序列化流:将对象从文件中还原出去
每次序列化对象,系统都会自动生成一个序列化ID,当反序列化对象的时候,系统就会校对,对象与文件内容的序列化ID。若是对应不上,就会报错。而对类成员的权限,类型等操作就会改变序列化ID。但是为了操作方便,一般都会自定义序列化ID。
当然如果不希望类成员数据被序列化,可以加上关键字transient封装好数据,这被标记的成员变量就不会被序列化。
序列化后的格式,参考toString()方法。
内存流:存在于内存中,会随着程序的结束,内存也会自动回收。就是一个临时存放数据的流。
字节内存流 ByteArrayInputStream/ByteArrayOutputStream
字符数组内存流CharArrayReader/CharArrayWriter
字符串内存流 StringReader/StringWriter
Properties类:表示一个持久的属性集,可以保存在流中,或者从流中加载:属性列表中每个键及其对应值都是一个字符串。(一般用来,读写xx.properties的配置文件)。可以当做Map集合使用。
setProperty(String key,String value) Properties专属存储属性集的方法(推荐使用)
put 或者putAll Properties当做Map集合类使用时的存储属性集方法(不推荐,因为会把不是字符串的对象也存储进去)
getProperties(String key) 获得键对应的值。
load(Reader reader) 获取所有属性集(键值对)列表
store(OutputStream out , String comments) 将指定的内容写入到指定的文件中去
clear() 清除所有装载的键值对。
需要获取海量最新BATJ视频资料加群:345353515 备注(简书)
java架构实践_Java架构实践-关于IO流相关推荐
- java 视频流 读取_Java之视频读取IO流解帧实施方案
获取视频处理对象的方式有很多,读取本地文件.读取url.读取摄像头等,而直接读流解析视频的实施方案却难以寻觅.此处有两种方案处理视频流(此处设定场景为用户上传视频,同时两种方式均需服务端安装ffmpe ...
- 黑马毕向东Java课程笔记(day20-1——20-17)IO流:File类及相关方法、递归、递归的相关练习、Properties、PrintWriter类与PrintStream类、合并流与切割流
1.File类概述 File是文件和目录路径名的抽象表示形式. 用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作. 前面说到的"流",它只能操作数据,想 ...
- 【程序员养成之路】Java基础篇 8-流进流出的IO流(二)
以下内容若有误,欢迎私信我或在下方留言,谢谢^_− 目录 IO流(二) 1.特殊操作流 1.1 标准流 1.2 打印流 1.3 对象序列化流 1.4 Properties 拓展1:比较字节流和字节缓冲 ...
- Educoder–Java高级特性(第一章)- IO流【笔记+参考代码】
Educoder–Java高级特性(第一章)- IO流[笔记+参考代码] 第一关 1.下列关于字节和字符的说法正确的是(BC) A.字节 = 字符 + 编码 B.字符 = 字节 + 编码 C.字节 = ...
- Java基础(二):集合、IO流(Zip压缩输入/输出流等)、File文件类、反射、枚举
Java基础(一):编译和解释.数据类型.变量作用域.String常用方法.数组.面向对象.异常 Java基础(二):集合.IO流(Zip压缩输入/输出流等).File文件类.反射.枚举 Java异常 ...
- java 微网站_java架构之路-(微服务专题)初步认识微服务与nacos初步搭建
历史演变: 以前我们都是一个war包,包含了很多很多的代码,反正我开始工作的时候做的就是这样的项目,一个金融系统,代码具体多少行记不清楚了,内部功能超多,但是实际能用到的不多,代码冗余超大,每次部署大 ...
- java io流 教程_Java基础教程:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:指的是从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列 ...
- java 写入文件流_Java实现文件写入——IO流
输入输出的重要性: 输入和输出功能是Java对程序处理数据能力的提高,Java以流的形式处理数据.流是一组有序的数据序列,根据操作的类型,分为输入流和输出流. 程序从输入流读取数据,向输出流写入数据. ...
- 第三次学JAVA再学不好就吃翔(part101)--IO流
学习笔记,仅供参考 文章目录 IO流 IO流的概述及其分类 FileInputStream 构造方法 成员方法 举个例子 FileOutputStream 构造方法 成员方法 举个例子 IO流 IO流 ...
- Java中使用try-with-resource优雅的关闭io流
前言 最近看到一篇关于串流的关闭方法,通过编译器自动生成关闭串流源码,行之有效. 转载自博主: Java劝退师. https://blog.csdn.net/qq_41389354/article/d ...
最新文章
- 静态反调试技术(1)
- 17 | 跳表:为什么Redis一定要用跳表来实现有序集合?
- 【平台兼容性】jeecg部署weblogic 测试,修改配置方法
- 看过无数 Java GC 文章,这 5 个问题你也未必知道!
- Oracle flashback之传统恢复vs.重现数据库
- 手机能上wifi电脑不行_电脑如何当Wifi供手机使用
- java datatable用法_C# DataTable用法示例详解|DataTable Select,sort排序,Linq过滤操作
- 自定义获取ip和地址的接口
- 台达AS228Tplc加台达触摸屏一套程序,一共100个io 左右,一个伺服程序。plc程序有FB块,ST语言,C语言,触摸屏有配方和数据储存功能
- 软件测试的测试方法有哪些?
- 2010.5.7 MFC中弹对话框以跟踪和程序运行中修改Static Text的Caption属性
- 体胖还需勤跑步,人丑就该多读书!
- Android Studio 项目运行错误,弹出“Detected ADB对话框”
- 酷派android最新版本,酷派手机怎么升级系统 酷派手机系统升级操作方法介绍
- 30 岁了, 现在开始努力,晚吗?
- JAVA面试系列:你了解系统可用性吗?
- 天猫登录 post java_天猫登录POST问题
- 计算机维修活动新闻稿,设备检修新闻稿_检修新闻稿
- 谈谈图书馆知识资源细颗粒度标引中的古籍稿本标引
- unity中的四种灯光
热门文章
- 数据中心淘汰服务器,浅谈数据中心危机严重的程度
- Assembly.CreateInstance()与Activator.CreateInstanc
- 小程序-Hello World
- PyCharm黄色波浪线提示: Simplify chained comparison
- 内核里面writel(readl)是如何实现的
- 从master-worker模型看团队管理
- C#类、方法的访问修饰符
- 认识接口(Interface)设计
- css background背景拉伸
- 个人对回调函数的理解(personal understanding of callback function)