java补漏知识点—第十四章

一、二进制 I/O
  1. 文件输入输出类:文本I/O类和二进制I/O
  2. 抽象类InputStream:是读取二进制数据的根类
  1. 方法:

read()
从输入流中读取下一个字节数据
read(byte[] b)
从输入流中读取 b.length 个字节到数组 b
read(byte[] b,int off,int len)
从输入流读取字节并且将它们保存在 b[off],b[off+1],…,b[off+len-1]
available()
返回可从输入流中读取的字节数的估计值
close()
关闭输入流
skip(long n)
从输入流中跳过并且丢弃 n 字节的数据
markSupported()
测试该输入流是否支持 mark reset 方法
mark(int readlimit)
在该输入流中标记当前位置
reset()
将该流重新定位到最后一次调用 mark 方法的位置

  1. 抽象类OutputStream:是写入二进制数据的根类
  1. 方法

write(int b)
将指定字节写入到该输出流中
write(byte[] b)
将数组 b 中的所有字节写入到输出流中
write(byte[] b,int off,int len)
b[off],b[off+1],…,b[off+len-1] 写入到输出流中
close()
关闭输出流
flush()
清掉输出流,强制写出任何缓冲的输出字节

  1. FileInputStream
  1. 方法:

FileInputStream(File file)
从一个 File 对象创建一个 FileInputStream
FileInputStream(String filename)
从一个文件名创建一个 FileInputStream

  1. 从文件读取字节
  2. 若为一个不存在的文件创建FileInputStream对象,将发生java.io.FileNotFoundException异常
  1. FileOutputStream
  1. 文件不存在,则创建文件
  2. 方法:

FileOutputStream(File file)
从一个 File 对象构建一个 FileOutputStream
FileOutputStream(String filename)
从一个文件名创建一个 FileOutputStream
FileOutputStream(File file,boolean append)
如果 append true ,数据将追加到已经存在的文件中
FileOutputStream(String filename,boolean append
如果 append true ,数据将追加到已经存在的文件中

  1. InputStreamOutputStream实现了AutoClosable接口。AutoClosable接口定义了close()方法,所以任何AutoClosable类型的对象都可以用于try-with-resourcesJDK1.8
  2. FileInputStream类的实例可以作为参数去构造一个Scanner对象,而FileOutputStream类的实例可以作为参数去构造一个PrinterWriter对象
  • Scanner c=new Scanner(fileInputStream);
  1. 过滤器数据流是为某种目的过滤字节的数据流;FilterInputStream类和FilterOutputStream类是过滤数据的基类。
  2. DataInputStream
  1. 从数据流读取字节,并且将它们转换为合适的基本类型值或字符串
  2. DataOutputStream类继承FilterInputStream类,并实现DataInput接口
  3. DataInputStream接口的方法:

readBoolean()
从输入流中读取一个 boolean
readByte()
从输入流中读取一个 byte
readChar()
从输入流中读取一个字符
readFloat()
从输入流中读取一个 float
readDouble()
从输入流中读取一个 double
readInt()
从输入流中读取一个 int
readLong()
从输入流中读取一个 long
readShort()
从输入流中读取一个 short
readLine()
从输入流中读取一行字符
readUTF()
UTF 格式读取一个字符串

  1. DataOutputStream
  1. 将基本类型的值获字符串转换为字节,并且将字节输出到数据流
  2. DataOutputStream类继承FilterOutputStream类,并实现DataOutput接口
  3. DataOutput接口的方法:

writeBoolean(boolean b)
向输出流中写入 boolean
writeByte(int v)
向输出流中写参数 v 8 位低位比特
writeBytes(String s)
向输出流中写一个字符串中字符的低位字节
writeChar(char c)
向输出流中写一个字符(由两个字节组成)
writeChars(String s)
向输出流中依次写一个字符串 s 中的每个字符,每个字符 2 个字节
writeFloat(float v)
向输出流中写入 float
writeDouble(double v)
向输出流中写入 double
writeInt(Int v)
向输出流中写入 int
writeLong(long v)
向输出流中写入 long
writeShort(short v)
向输出流中写入 short
writeUTF(String s)
UTF 格式写一个字符串 s

  1. 二进制I/O中的字符与字符串
  1. 一个统一码由两个字节构成
  2. UTF-8字符之前的两个字节用来存储表明字符串中字符个数的信息
  3. 如果一个长字符串的大多数字符都是普通的ASCII字符,采用UTF-8格式存储更高效
  1. DataInputStream类和DataOutputStream类以同机器平台无关的方式读写Java基本类型值和字符串
  2. 如果到达InputStream的末尾之后还继续从中读取数据,就会发生EOFException异常;该异常可用来检查是否到达文件末尾
  3. 使用BufferedInputStream类和BufferedOutputStream类可通过减少磁盘读写次数来提高输入和输出速度。
  1. BufferedInputStream类:磁盘上的整块数据一次性地读入到内存中的缓冲区,然后从缓冲区将个别的数据传递到程序
  2. BufferedOutputStream类:个别的数据首先写入到内存中的缓冲区,当缓冲区已满时,一次性写入磁盘

二、对象 I/O
  1. ObjectInputStream类和ObjectOutputStream类可以用于读/写可序列化的对象;即处理可实现基本数据类型与字符串的输入和输出外,还可实现对象的输入和输出
  2. 可序列化的对象:可有格式地写入输入流的对象
  3. Serializable接口
  1. 可序列化的对象的类必须实现java.io.Serializable接口
  1. Java提供一个内在机制自动完成写对象的过程,该过程称为对象序列化;它是在ObjectOutputStream中实现的
  2. 对象反序列化:读取对象的过程;它是在ObjectInputStream类中实现的
  3. 当储存一个一个可序列化对象时,会对该对象的类进行编码。编码包括类名、类的签名、对象实例的值以及该对象引用的任何其他对象的闭包,但不存储对象的静态变量
  4. 当对象是Serializable的实例,但包含了非序列化的实例数据域;要使其可序列化,需给这些数据域加上关键字transient,告诉Java虚拟机将对象写入对象流时忽略这些数据域。
  5. 对象写入时,会为它创建一个序列号,以后写入它时,只存储序列号
  6. 可序列化数组:所有元素都是可序列化的

三、随机访问文件
  1. RandomAccessFile类:允许从文件的任何位置进行数据的读写
  1. 方法:

RandomAccessFile(File file,String mode)
使用指定的 File 对象和模式创建 RandomAccessFile
RandomAccessFile(String name,String mode)
使用指定的文件名和模式创建 RandomAccessFile
close()
关闭流
getFilePointer()
返回以字节计算的从文件开始的偏移量,下一个 read write 从该位置开始
length()
文件的字节数
read()
从文件中读取一个字节数据
read(byte[] b)
从该文件中读取 b.length 个字节数据到一个字节数组
read(byte[] b,int off,int len)
从该文件中读取 len 个字节数据到一个字节数组
seek(long pos)
设置从流开始位置计算的偏移量 (pos 个字节 ) ,下一个 read write 从该位置开始
setLength(long newLength)
为该文件设置一个新长度
skipBytes(int n)
跳过 n 个字节的输入
write(byte[] b)
从指定的字节数组中写 b.length 个字节到该文件中
write(byte[] b,int off,int len)
从偏移量 off 开始,从指定的字节数组中写 len 个字节到该文件中

  1. 当创建一个RandomAccessFile时,可以指定两种模式("r””rw”
  2. 不存在,则创建文件
  1. 顺序流:只读或只写的流
  2. 顺序访问文件:使用顺序流打开的文件
  3. 随机访问文件:使用RandomAccessFile类打开的文件


上一章                                                                        下一章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值