IO(下)

其他IO流

JDK提供了ObjectInputStream和ObjectOutputStream(对象输入输出流)第一个实现对象的序列化(把对象永久保存,转为字节数据写入硬盘),此前必须保证该对象实现了Serializable接口。第二个实现反序列化,把序列化后的二进制数据恢复成之前的java对象。

当不需要存储整个对象的信息,只要存储对象的成员数据(基本数据类型)的时候,可以用DataInputStream和DataOutputStream,其中还有readUTF()和writeUTF()方法,读写UTF-8的字符编码的字符串。读取数据的顺序要和写数据的顺序一样。

输出流通过write方法写数据时,只能输出字节或字符类型数据,PrintStream就可以便捷的把基本数据类型和引用数据类型的对象格式化成字符串后输出。

err也是PrintStream类型,和out一样输出带控制台,只是输出的是应用程运行时的错误信息。当程序输出大量数据时无法阅读,可以将标准输出流重新定向到其他输出设备(文件之类的)
System类提供重定向流的常用静态方法:

  1. void setIn(InputStream in) 对标准输入流重新定向
  2. void setOut(PrintStream out) 对标准输出流重新定向
  3. void setErr(PrintStream out) 对标准错误输出流重新定向

JDK提供了一种管道流,PipedInputStream和PipedOutputStream来实现多个线程之间的IO流数据传输。但必须先建立连接才能进行彼此之间的通信。PipedReader、PipedWriter也可以用于多线程通信,用法相似。

JDK提供了一个ByteArrayOutputStream类将文件临时存储到缓冲区,方便以后读取。ByteArrayOutputStream类在创建对象的时候就创建一个byte型数组的缓冲区,向数组中写数据时,该对象会把所有的数据先写入缓冲区,最后一次性写入文件。这样可以减少写数据的次数,使效率提高,但是数据大的时候会造成内存溢出。ByteArrayInputStream用来读取缓冲区的数据。

JDK提供的CharArrayReader(从字符数组中读取数据)和CharArrayWriter(在内存中创建一个字符数组缓冲区),他们的作用和上面两个差不多,但是操作的数据是字符。

SequenceInputStream类可以将几个输入流串联在一起,合并为一个输入流。这个输入流读取数据时会依次从所有被串联的输入流中读取数据,对于程序来说,就像对同一个流进行操作。创建SequenceInputStream对象时使用的构造方法只有两个参数,只能合并两个流;多个流合并的构造方法:
SequenceInputStream(Enumeration<? extends InputStream>e)

File类

JDK提供的File类封装了一个路径,并提供了一系列的方法用于操作该路径所指向的文件。

File类的常用构造方法:
1.File(String pathname) 通过指定的一个字符串类型的文件路径来创建一个新的File对象。
2.File(String parent,String child) 根据指定的一个字符串类型的父路径和一个字符串类型子路径(包括文件名称)创建一个File对象
3.File(File parent,String child)根据指定的File类父路径和字符串类型的子路径(包括文件名称)创建的一个File对象
File类常用方法:在这里插入图片描述
list是遍历目录下所有的文件,如果需要得到指定类型的文件,File类中提供了一个重载list(FilenameFileter filter)方法,接受一个FilenameFilter类型的参数。FilenameFilter是一个接口(文件过滤器),当中定义了一个抽象方法accept(File dir,String name),调用list方法时,需要实现文件过滤器,在accept()方法中做出判断。如果目录下还有子目录,就用listFile(),它返回一个File对象数组,如果其中还有子目录就要用递归。

delete方法只能删除某个指定的文件,如果要删除某个目录的全部文件,就要用到递归。java中删除目录是从虚拟机直接删除的不走回收站,文件无法恢复。

RandomAccessFile

之前的IO流都是按顺序来读写的,RandomAccessFile不属于流类,可以随机地从文件的任何位置开始执行数据的操作
RandomAccessFile的两个构造方法:
1.RandomAccessFile(File file,String mode) 参数file指定被访问的文件
2.RandomAccessFile(String name,String mode)参数name指定被访问文件的路径
定位文件位置的方法:
1.long getFilePointer() 返回当前读写指针所处的位置
2.void seek(long pos) 设定读写指针的位置,与文件开头相隔pos个字节数
3.int skipBytes(int n)使读写指针从当前位置开始,跳过n个字节
4.void setLength(long newLength)设置此文件的长度

字符编码

在这里插入图片描述
使用String类的getBytes(String charsetName)方法把字符串按照指定的码表编码成字节数组。
可以通过构造方法InputStreamReader(InputStream in,String charsetName)和OutputStreamWriter(OutputStream in,String charsetName)创建对象流时,可以对需要读写的数据指定编码格式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值