黑马程序员_IO流

---------------------- android培训java培训、期待与您交流! ----------------------

流的分类

输入流、输出流 

A、输入流:只能从中读取数据,而不能向里面写数据

B、 输出流:只能向里面写数据,而不能读数据

可以这样理解,数据从内存到硬盘,通常认为是输出流,即写操作;相反,从硬盘到内存,通常认为是输入流,即读操作;这里的输入、输出是从内存的角度划分的

Java的输入流主要有InputStream和Reader作为基类,而输出流则主要由OutputStream和Writer作为基类;

 

字节流和字符流

字节流和字符流区别非常简单,它们的用法几乎一样。区别在于字节流和字符流所操作的数据单元不同:字节流操作的最小单元数据是8位字节,而字符流作为最小数据单元是16为字节。

字节流主要由InputStream、OutputStream作为基类,而字符流则主要由Reader和Writer作为基类完成。

 

Java的输入、输出流:

分类

字节输入流

字节输出流

字符输入流

字符输出流

抽象基类

InputStream

OutputStream

Reader

Writer

访问文件

FileInputStream

FileOutputStream

FileReader

FileWriter

访问数组

ByteArrayInputStream

ByteArrayOutputStream

CharArrayReader

CharArrayWriter

访问管道

PipedInputStream

PipedOutputStream

PipedReader

PipedWriter

访问字符串

   

StringReader

StringWriter

缓冲流

BufferedInputStream

BufferedOutputStream

BufferedReader

BufferedWriter

转换流

   

InputStreamReader

OutputStreamWriter

对象流

ObjectInputStream

ObjectOutputStream

   

抽象基类

FilterInputStream

FilterOutputStream

FilterReader

FilterWriter

打印流

 

PrintStream

 

PrintWriter

推回输入流

PushbackInputStream

 

PushbackReader

 

特殊流

DataInputStream

DataOutputStream

   


RandomAccessFile

RandomAccessFile是Java输入、输出体系中功能最丰富的文件内容访问类,它提供了众多方法来访问文件内容,它既可以读文件内容也可以像文件输出数据。它和普通的输入、输出流不同的是,它可以随机访问的方式,操作文件数据。

RandomAccessFile可以自由定位文件指针,所以RandomAccessFile可以不从开始的地方输出,RandomAccessFile可以向已经存在的文件后追加内容。

RandomAccessFile对象包含一个指针用来记录当前读写的位置,当程序新创建一个RandomAccessFile对象时,该指针位于文件头部,既0的位置;当读取或写入了n个字节后,文件指针就指向最后的位置,除此之外,文件指针也是可以随意移动的,RandomAccessFile有以下方法操作指针:

long getFilePointer():返回文件记录指针的当前位置

void seek(long pos):将文件记录指针定位到pos位置

RandomAccessFile既可以读也可以写,所以它包含了完全类似于InputStream的read方法,和OutputStream的write方法,用法和原来的都一样;而且RandomAccessFile还包含了readXxx、writeXxx的输入输出方法;

RandomAccessFile的文件访问模式:

r:以只读方式打开指定文件

rw:以读取、写入方式打开指定文件,如果文件不存在就创建

rws:以读取、写入的方式打开指定文件,相对应rw模式,还要求文件内容和元数据的每个更新都同步写入到底层存储设备

rwd:以读取、写入方式打开指定文件,对于rw,还要求文件内容的每个更新都同步写入到底层设备


序列化

在远程调用、分布式开发中常用到序列化,将java对象序列化的文件中保存,然后在解析的时候又反序列化,其中需要用到Serializable接口;在实现了该接口的对象可以顺利序列化成一个文件保存在硬盘上,反序列化也是通过该接口的id来查找该对象的。

transient可以忽略对象中某个属性不被序列化。


---------------------- android培训java培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值