Java笔记(四)——输入输出

1.注意,输入输出流以字节流为操作对象,InputStream是所有输入流基类,OutputStream是所有输出流基类,这两个基类不能被实例化;

 

2.InputStream的public int read()函数从输入流读入一个字节,存储在返回int对象的低八位里。OutputStream的public void write(byte[] b)把字节数组写入当前文件,public void write(int b)把b的低八位写入当前文件

 

3.数据输入输出流DataInputStream、DataOutputStream的有点在于他们提供了readBoolean、readFloat等直接读取基本类型的成员方法,还有writeBoolean、writeFloat等直接输出基本类型的成员方法;

 

4.PrintStream是标准输出,System.out和System.err都是PrintStream的对象(),有点在于包含可以直接输出多种数据类型的成员方法,像print(char c)、print(float)、print(String)、print(Object)等,还有对应的println函数换行输出函数;

 

5.带缓冲的输入输出流BufferedInputStream、BufferedOutputStream,他们的对象会在内存中开辟一个字节数组,存放数据流中数据。这样可以把一个较大的数据块读入内存,也可以把一个大数据块一次性写入文件中,实现高效读写。

他们的构造函数如下:

 public BufferedInputStream(InputStream in)

public BufferedInputStream(InputStream in, int size)

和

public BufferedOutputStream(OutputStream out)

public BufferedOutputStream(OutputStream out, int size)

其中in、out通常是文件输入输出流对象,用BufferedInputStream、BufferedOutputStream比普通文件输入输出流快;

 

6.随即访问文件类型RandomAccessFile:他不同于普通输入输出流之处在于,他可以不按顺序的读写,而且可以用同一个对象进行读写。

RandomAccessFile将文件看成字节数组,他用一个指针记录当前位置,可以用成员函数public seek(long pos) throws IOException将指针定位到pos制定位置,pos单位为字节,getFilePointer()可以获得指针当前位置,skipBytes(int n)把指针后移n个字节。

RandomAccessFile的read函数只读取一个字节,RandomAccessFile还提供readInt、readFloat等成员方法来读取基本类型,public final String readLine()读取一行

RandomAccessFile的write函数当参数为int时只将int对象的低8为写入文件,当参数为字节数组时把该数组写入文件,如果想直接写入基本数据类型可以用writeInt、writeFloat等函数;

 

7.Java中有一套和输入输出流对应的读写器:Reader、Writer、FileReader、FileWriter...,读写器与输入输出流区别在于,前者处理的是字符流,后者处理的时字节流,读写器一般会获得较好的中文支持;

 

8.ObjectInputStream、ObjectOutputStream用来输入输出可序列化对象(可序列化的类型必须继承自java.io.Serializable)。

ObjectOutputStream提供writeBoolean、writeFloat等成员方法输出基本类型,writeObject输出引用类型对象;

ObjectInputStream提供readBoolean、readFloat等成员方法读入基本类型,readObject读入引用类型对象,读出后需要做类型转换,如T t = (T)(of.readObject());

注意,如果不在序列化类中定义static final long serialVersionUID,系统会自动生成一个序列号,当做当前类的哈希码,只有序列号相等的对象才能有readObject读取。当类发生改变时系统会自动生成的序列号会改变,序列号不一致时会导致读取失败;

 

9.前面的输入输出类都是针对文件内容的,而java.io.File可以从整体上对文件进行处理,很少涉及文件内容操作。比如File对象可以用exists判断当前对象的路径或文件是否存在,isFile判断当前对象是否是文件,isDirectory判断当前对象是否是路径,getAbsolutePath获取当前对象的绝对路径,delete删除当前对象所表示的文件或路径,mkdir创建路径;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值