IO流
Posted eatandsleep
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IO流相关的知识,希望对你有一定的参考价值。
IO流:
一、 File
1.1 概述
Io流的端点是File类;所以File对象可以作为参数传递给流的构造器。
Java是是面向对象的语言。在java中表示文件和目录(文件夹)的类就是File;可以用它来表示一个真实存在文件和目录(文件夹),但是java程序中的File对象可能没有一个真实存在的文件或目录(文件夹)。
File类可以对文件和目录(文件夹)进行增删改查的操作,但是不能够访问文件内容本身。如需访问还是需要输入/输出流;
1.2构造器
1、创建对象(路径)
创建对象可以分为两类,一类是根据给定的路径创建一个对象,还有就是在给定的路径下创建一个File对象;
路径分为绝对路径和相对路径;绝对路径是带盘符的路径,相对路径是相对于当前项目;
2、路径分隔符
在windows系统下支持的路径分隔符为\\
在Lninx和URL中路径分隔符为 /
Java为了解决兼容性问题在File中定义了一个静态常量:File.separator
后来windows兼容了 / 所以 路径分隔符的通用格式为 /
1.3 常用方法
二、IO流
2.1概述
IO流技术用来处理设备之间的数据传输。常用的有读写文件和网络通讯;Java中的IO是用流来进行操作的。
根据流的流向可以分为输入流和输出流。
根据流数据的单位可以分为字节流和字符流。字符流主要用来处理纯文本文件,比如java txt js css html等这些文件。Word,excel不是文本文件,因为里面有图片。字节流可以读取字符流但是不能在内存中使用,查看因为单位不同,变成字符时会产生错误。
按根据流的功能可以分为节点流和处理流。节点流负责要处理文件的节点,处理流是装饰节点流或处理流的。这里用了装饰者模式;
2.2 IO流体系
数据流可以在文件中存储基本数据类型和String
对象流的范围更广,可以写入,写出对象流(包括基本数据类型和String),但是要序列化操作。
2.3 IO流操作的固定模式
1、创建端点(File)
也可以不创建,字节在节点流输入Path
2、创建节点流
常用的是文件节点流
3、创建处理流
处理流主要是装饰作用,可以装饰节点流,也可以装饰处理流。
缓冲流的底层创建了一个8kb的空间,用来缓存数据提高输入输出的速度
转换流是为了解决字符的编码解码问题。
String也有编码解码对应的方法;
对象流相关的是序列化和反序列化。
序列化是将内存中的对象转换为二进制文件。要求改对象实现Serializable接口 ,提供一个序列化版本号serialVersionUID。每个类都会有默认serialVersionUID版本号,但是会随着属性和值的变化而发生变化,当跨平台时,对象发生更改就不能正确的识别原来的类。对象实现了Serializable接口后可以将其转化为字节,通过IO流将其持久化,然后将其在不同平台之间转换,如:在Window上创建了一个对象可以在mac电脑上恢复,同时这还可以通过网络进行操作。
同时序列化对象的属性也要求可以序列化,基本数据类型和String系统已经实现了序列化,关键是自己定义的类属性需要实现序列化。需要注意的是Static修饰的属性是类属性不能够序列,如果有要求非类属性不序列化的可以使用关键字transitacn
序列化的应用是Web,进程之间交互数据。
4、进行读写操作方式是read(),和write();
read()是一次读入一个字节,和硬盘交互太多影响效率,返回每次读要的字符为int型
read(数组),是一次读入读入数组的长度,读入后数据覆盖改数组元素,返回本次读到的字符/字节个数;数组的长度不是无限大,最大为8kb;
BuffedReader提供了一个read Line()功能的方法,每次可以读一行,但是没有读换行符,所以所有数据都联成一行,可以用其提供的另一个方法newLine()换行;
处理流执行write()方法要调用flush()方法输出。
write()方法默认覆盖文件,如果是追加调用2个参数的方法。
5、关闭资源
关闭资源要进行非空判断,否则会报空指针异常,同时也可以用1.7新出的try(){} 避免finally很长。
2.4 特殊的IO流
在IO流中有一个特殊的类RandomAccessFile类,这个类实现多线程断点写入,写出。该类直接继承自Obeject,实现了DataOutput 和DataInput接口。所以这个类可以读入、也可以写出。还提供了记录指针的方法seek(int pos),可以从指针位置写入写出。
我们在创建对象的时候要指定这个对象的模式,有四种模式:
r 表示只能以只读的模式
rw 表示可以读写
rwd 可以读写,多线程下同步内容的更新
rws 可以读写,多线程下同步内容和元数据的更新
以上是关于IO流的主要内容,如果未能解决你的问题,请参考以下文章