Java的IO

Java.io下的类、接口及方法等。
I是input,O是Output,顾名思义就是输出输入。
input表示从硬盘进到内存,output表示从内存出到硬盘,两者都是以内存为参照物。

/卡壳
在调用的过程中可能出现的异常的try,catch语句的编写要注意:
new的io包中的类的对象是一个流,在应用完之后要对其进行关闭,否则会造成资源上的浪费。因为输入输出都是需要数据线对数据进行运输的,如果不关闭建立的连接,则出现资源浪费。
在使用write方法进行写入时,当写入完成后应该再调用flush方法冲刷管道,作用是使管道中没有完全写入硬盘的数据写入硬盘,保证数据的完整性。
卡壳/

read方法不带参数的返回的是一个字符,带参数的则返回读的字符流或字节流的个数。其中汉字占两个字节为一个字,字符a为一个字节。则请试验汉字是否能通过字节流读取一个字?理论上应该是不能。
答:当源文件中存储的是汉字,idea工具中目标文件会无法打开。

available方法可以得到文件中所含的字节或字符的个数,以此来配合write方法将一个文件内容复制给另一个文件。
修正:返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。简而言之就是read可读的数据最大数。当文件的输入流没有超过read方法的限定时,available方法返回的就是文件所含字节或字符的最大个数,否则就是能够read的最大字节或最大字符个数。(缺少试验)

缺:在关闭多个流时,每个关闭的异常都应该分开捕捉,不然会出现什么问题(出现的问题卡壳)?
例如当要关闭两个流时,两个流都写在同一个try体力,根据try体的特性,当执行到哪一行出现异常后直接到catch体了,此时下面的流关闭还没有关闭,就造成了资源的浪费。
缺:在什么情况下当没有文件时写的时候会自动创建文件?
目录存在而文件不存在的情况下会创建文件并写入,当目录不存在时会报错,此时需要调用mkdir方法来创建目录,才能使文件的写正常进行。

以字节方式

可以写入图片类非字符型数据。
FileInputStream:
fis.read方法有多个
FileOutputStream:
append表示追加变量,初始化时如果不给append传一个true值则会对文件清空后写入。

以字符形式

FileReader
FileWriter

缓冲流

带标志和返回最新标志位功能。
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter

转换流

将字节流转换为字符流。
InputStreamReader
OutputStreamWriter

对象流

ObjectInputStream
ObjectOutputStream
序列化和反序列化:
序列化是将对象分块读到硬盘文件中,反序列化是将分块的对象信息写入内存拼成完整的对象。
序列化和反序列化的实现要求当事类实现serialize接口,这是一个标志接口,标志接口的接口体是没有代码的,只是作为标志用,当虚拟机检测到这个标志接口后,会给一个序列码,这个序列化版本号的作用是什么呢?

答:类的区分首先是通过类名去区分,当类名相同,就去比较序列化版本号。当你没有自定义序列化版本号且用final修饰时,类一旦改写,序列化版本号就会发生变化,此时再反序列化时就会报错,反序列化的时候用之前的序列化版本号对照现在的序列化版本号,发现不一致,则报错。

序列化和反序列化的作用,暂时当机后回来可以及时恢复相关信息,当这些相关信息无需存放进数据库的时候可以应用这种方式。
writeObject和readObject方法的逻辑:
write即是写,写是将内存的东西写入硬盘,这个时候需要给ObjectOutputStream一个文件,这个文件是对象信息将要写入的目标文件,然后写入之后因为是拆开写的,所以打开的时候看到的是乱码,看不到完整的对象信息。在写的时候要给定对象参数,否则不知道将哪个对象写入文件。
read是读,即将文件中的对象碎片信息写入内存中,则需要给定从哪个文件中读取对象信息。

缺:应注意在处理多个对象时需要将对象存入list集合中再将list当成参数给new ObjectOutputStream。
transient修饰符:游离的;transient修饰符修饰的变量不参与对象的序列化,在对象序列化过程中该变量的值都是以null读入和写出。

打印流

自动刷新流。
PrintStream
PrintWriter
PrintStream流中有个setOut方法,将输出语句从输出到控制台改为输出到文件中。

PrintStream ps = new PrintStream(new FileOutputStream("log.txt"));
ps.setOut(ps);
ps.println("hello,s");

数据流

DataInputStream
DataOutputStream
数据流可以将数据和数据类型一并写入文件中,当打开文件时看到会看到乱码,可以理解为加密文件。
注意,在读的时候必须要知道写的时候的顺序,否则读的时候数据会出问题,想象一下你写的时候是String类型,但是读的时候以boolean类型读入。

File类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值