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() 清除所有装载的键值对。
IO流简要总结的更多相关文章
- C# IO流的操作
C# IO流的操作非常重要,我们读写文件都会使用到这个技术,这里先演示一个文件内容复制的例子,简要说明C#中的IO操作. namespace ConsoleApplication1 { class P ...
- Java基础17:Java IO流总结
更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...
- C# IO流的操作(一)
C# IO流的操作非常重要,我们读写文件都会使用到这个技术,这里先演示一个文件内容复制的例子,简要说明C#中的IO操作. namespace ConsoleApplication1 { class P ...
- io流中的装饰模式对理解io流的重要性
为了说明 io流中的装饰者模式对理解io流的重要性,我想先简要介绍以下io的装饰模式. 装饰(decorator)你也可以翻译成修饰.比如:一个会精通化学数学的物理学家.在这个"物理学家&q ...
- 史上最骚最全最详细的IO流教程,没有之一!
目录 1.告白IO流的四点明确 2.File类 1.1 File概述 1.2 构造方法 1.3 常用方法 1.3.1 获取功能的方法 1.3.2 绝对路径和相对路径 1.3.3判断功能的方法 1.3. ...
- IO流学习笔记(一)之FileWriter与FileReader
IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包中 流按照操作数据分为两种:字节流和字符流 流按流向分为:输入流和输出流 输入流和输出流是相对于 ...
- Java基础之IO流
很长时间都没有更新了,最近在补充JavaSE的一些细节部分 关于IO流的一些总结 首先要介绍的是File类,File类用于对文件和目录的一些操作 1.创建文件CreateNewFile() 2.对文件 ...
- Java中IO流,输入输出流概述与总结
总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都是抽象类InputStream(字节输入 ...
- Java:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
随机推荐
- 前端教程(1)http协议的深刻理解
一 HTTP协议简介 作为学习前端开发的开始,我们必须搞明白以下几件事 1.什么是互联网 互联网=物理连接介质+互联网协议 2.互联网建立的目的? 数据传输打破地域限制,否则的话,我 ...
- Java开发者必备的10大学习网站,送给入门学习java的你,请收下!
作为开发者来说,必备的除了对编码的热情还要有自己的一套技巧,另外不可缺少的就是平时学习的网站.以下本人收集的 Java 开发者必备的网站,这些网站可以提供信息.以及一些很棒的讲座 , 还能解答一般问题 ...
- 开发教程(四) MIP组件平台使用说明
组件审核平台用于上传 MIP 组件.经过自动校验之后,提交审核,通过审核的组件会定时推送到线上,供网站使用. 平台地址:https://www.mipengine.org/platform/ 1. 使 ...
- SQLI LABS Challenges Part(54-65) WriteUp
终于到了最后一部分,这些关跟之前不同的是这里是限制次数的. less-54: 这题比较好玩,10次之内爆出数据.先试试是什么类型: ?id=1' and '1 ==>>正常 ?id=1' ...
- 为什么我的会话状态在ASP.NET Core中不工作了?
原文:Why isn't my session state working in ASP.NET Core? Session state, GDPR, and non-essential cookie ...
- TreeSet集合解析
TreeSet是实现Set接口的实现类.所以它存储的值是唯一的,同时也可以对存储的值进行排序,排序用的是二叉树原理.所以要理解这个类,必须先简单理解一下什么是二叉树. 二叉树原理简析 假如有这么一个集 ...
- 全球第一免费开源ERP Odoo PM OKR项目管理操作指南
概览 Odoo项目允许你和整个项目团队一起管理项目, 与项目和任务成员中的任何一个人沟通. 它与包含可定制阶段的任务的项目一起工作.项目可以是内部的或客户导向的.任务是项目执行的一部分.你可以给这 ...
- android 自定义权限管理
在Android6.0后有些权限就需要进行询问,虽然可以将targetSdkVersion设置成小于等于23,但是这样可能有些东西无法使用,所以要进行权限的管理. 实现逻辑:打开页面就询问权限,如果没 ...
- 需求分析&用例编写
一.需求分析? 1.什么是需求 软件产品必须完成的是以及必须具备的品质. 功能性需求:产品必须完成的那些事,要求一定的功能和品质. 例子:淘宝的用户名登录. 非功能性需求:产品必须具备的属性和品质.诸 ...
- requestAnimationFrame 知多少?
在Web应用中,实现动画效果的方法比较多,JavaScript 中可以通过定时器 setTimeout 来实现,css3 可以使用 transition 和 animation 来实现,html5 中 ...