不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

34 篇文章 1 订阅

目录:

IO流

路径&路径分隔符:

File方法

文件本身操作(文件创建删除):

例子:创建文件

例子:删除文件

IO流原理

文件读取案例:

文件读取案例2:

文件写案例1:

文件读入写出案例:

字节流Stream输入输出案例:

为什么使用数组:

缓冲流的使用案例:

转换流(属于字符流)

标准输入输出流(了解):

打印流(了解):

数据流(了解):

对象流:

序列化反序列化案例:

随机存取文件流

NIO2(了解)


本节的所有代码都在这里:这里

位于javalearn的filelearn中

 

IO流

File类的一个对象代表一个类或者一个文件目录

File声明在java.io包下。

 

 

 

路径&路径分隔符:

  

File方法

需要注意的是:new File()是不会创建一个新的文件的,只是在内存中创建对应的对象。

   

文件本身操作(文件创建删除):

未对文件内部操作

 

例子:创建文件

  

例子:删除文件

 

IO流原理

我们是站在程序的角度上看输入和输出。

 

字符流:常用于文本文件。

字节流:常用于图片,视频。

    

流的使用步骤:

 

文件读取案例:

注意读入需要文件本身存在!!!

 

上述代码只是代码主体,但是如果使用throws方法进行异常处理,如果在关闭前出现了异常,整段代码最终就不会关闭,容易造成内存泄漏,所以我们需要使用try-catch-finally方法进行异常处理。所以我们更改为下面代码:

 

但是这段代码还是有问题:问题在于如果我们创建了一个fr的对象之后,在new的时候出现了异常,也就是没有成功创建对象,最后我们在关闭fr时就会出现空指针问题。所以为了解决这个问题,我们需要修改finally中的方法:

 

文件读取案例2:

 

文件写案例1:

没有的文件会直接自动创建

写操作覆盖整个文件(缺省)。如果修改为true就表示不覆盖,直接在后面写。

 

 

 

文件读入写出案例:

  

字节流Stream输入输出案例:

  

为什么使用数组:

如果每次存取一个祖字符,这样交互产生的开销会非常大。这个数组就相当于组成原理中的缓存的概念,取一个合适的大小最终再一起读或者取。但是不能太大否则内存消耗过大。

 

上述的四种方式在实际操作过程中用的很少,原因在于这个方法效率不高,一般来说我们都会使用缓冲流。

 

注意处理流是不可以直接创建的,需要在节点流的基础上使用

缓冲流的使用案例:

 

使用了缓冲流之后再数组同为10时:花费时间为58.如果不适用缓冲流,如上图所示时间为6714.

   

转换流(属于字符流)

  

转换流案例:

 

标准输入输出流(了解):

 

打印流(了解):

只有输出流

 

数据流(了解):

用于持久化基本数据类型的变量或者字符串

 

例子:

 

读取数据的顺序需要和当初写入文件的顺序相同。

 

对象流:

数据流没法存储相应的对象,所以产生了对象流。

 

对象的序列化:

  

详细说明上述三种问题:

1.注意一个自定义的类如果能够序列化我们需要这个对象实现Serializable这种接口称之为标识接口,没有方法。

 

其次我们需要一个标识序列号

   

2.就是说如果不加这个版本序列号,我们要是修改了序列化之后的自定义类,很有可能会在反序列化的时候出现异常。

3.如果我们的自定义类中还有其他的自定义类,但是这个其他的自定义类没有声明为可序列化的也会导致错误出现。

4.补充知识:如果成员变量使用的是static或者是transient修饰,则不能序列化。会出现无法保存的问题(transient表示不能序列化这个属性)

序列化反序列化案例:

  

随机存取文件流

 

写文件的时候会从头开始进行覆盖。

   

NIO2(了解)

 

NIO是JDK7之前的,NIO2为JDK7之后的

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值