Java IO流

目录

File类操作

输入和输出(IO)概述

文件流概述

字节流案例

文件字符流

不能使用单字节的字符集(ASCII/ISO-8859-1)来存储中文.

包装流和缓冲流概述​

转换流和内存流

合并流

打印流

标准IO概述和操作

扫描器类(Scanner)

数据流

随机访问文件(RandomAccessFile)

管道流

NIO

IO流总结


File类操作

输入和输出(IO)概述

文件流概述

字节流案例

文件字符流

字符编码

字符编码的发展历程:

阶段1:

计算机只认识数字,我们在计算机里一切数据都是以数字来表示,因为英文符号有限,所以规定使用的字节的最高位是0.每一个字节都是以0~127之间的数字来表示,比如A对应65,a对应97.这就是美国标准信息交换码-ASCII.

阶段2:

随着计算机在全球的普及,很多国家和地区都把自己的字符引入了计算机,比如汉字.此时发现一个字节能表示数字范围太小,不能包含所有的中文汉字,那么就规定使用两个字节来表示一个汉字.规定:原有的ASCII字符的编码保持不变,仍然使用一个字节表示,为了区别一个中文字符与两个ASCII码字符,中文字符的每个字节最高位规定为1(中文的二进制是负数).这个规范就是GB2312编码,后来在GB2312的基础上增加了更多的中文字符,比如汉字,也就出现了GBK.

阶段3:

新的问题,在中国是认识汉字的,但是如果把汉字传递给其他国家,该国家的码表中没有收录汉字,其实就显示另一个符号或者乱码.为了解决各个国家因为本地化字符编码带来的影响,咱们就把全世界所有的符号统一进行编码-Unicode编码.此时某一个字符在全世界任何地方都是固定的,比如'哥',在任何地方都是以十六进制的54E5来表示.Unicode的编码字符都占有2个字节大小.

--------------------------------------------------------------------------------------------------------------

常见的字符集:

ASCII:占一个字节,只能包含128个符号.不能表示汉字
ISO-8859-1:(latin-1):占一个字节,
收录西欧语言,.不能表示汉字.
ANSI:占两个字节
,简体中文的操作系统中ANSI 就指的是 GB2312.
GB2312/GBK/GB18030:占两个字节
,支持中文.
UTF-8:一种针对Unicode的可变长度字符编码,又称万国码,是Unicode的实现方式之一。

编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部份修改,即可继续使用。
因此,它
逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。互联网工程工作小组(IETF)要求所有互联网协议都必须支持UTF-8编码。
UTF-8BOM:是
MS搞出来的编码,默认占3个字节,不要使用这个.

--------------------------------------------------------------------------------------------------------------

存储字母,数字和汉字:
存储字母和数字无论是什么字符集都占1
个字节.
存储汉字
 GBK家族占两个字节,UTF-8家族占3个字节.

--------------------------------------------------------------------------------------------------------------

不能使用单字节的字符集(ASCII/ISO-8859-1)来存储中文.


包装流和缓冲流概述

转换流和内存流

合并流

对象流(序列化和反序列化)

序列化和反序列化:

序  列 化指把堆内存中的Java对象数据,通过某种方式把对象存储到磁盘文件中或者传递给其他网络的节点(在网络上传输).

                    我们把这个过程称之为序列化.

反序列化:把磁盘文件中的对象数据或者把网络节点上的对象数据,恢复成Java对象的过程.

为什么要做序列化:

  1. 在分布式系统中,需要共享的数据的JavaBean对象,都得做序列化,此时需要把对象再网络上传输,此时就得把对象数据转换为二进制形式.
     以后存储在HttpSession中的对象,都应该实现序列化接口(只有实现序列化接口的类,才能做序列化操作).
  2. 服务钝化:如果服务发现某些对象好久都没有活动了,此时服务器就会把这些内存中的对象,持久化在本地磁盘文件中(Java对象-->二进制文件).
    如果某些对象需要活动的时候,现在内存中去寻找,找到就使用,找不到再去磁盘文件中,反序列化我们得对象数据,恢复成Java对象.

需要做序列化的对象的类,必须实现序列化接口:java.io.Serializable接口(标志接口[没有抽象方法]).

   底层会判断,如果当前对象是Serializable的实例,才允许做序列化.   boolean   ret = Java对象 instanceof  Serializable;

   Java中大多数类都已经实现Serializable接口.

 

打印流

标准IO概述和操作

扫描器类(Scanner)

Properties类加载文件

配置文件:资源文件(.properties作为拓展名的文件)/属性文件:

做项目开发,为何使用配置文件?

    把所有的数据存储在代码中,写死了,”硬编码”.
    
比如:Java中需要连接数据库,必须拥有数据的账号和密码.
    
此时我们就得在Java代码中编写,类似的代码:

       String username=”root”;
       String password=”admin”

     代码程序运行OK.
     
但是,以后我们把项目部署在别人电脑/服务器中,别人电脑中的数据库的账号和密码可以不再是rootadmin,此时我们就得去项目中到处去找使用了账号和密码的地方.
    
部署项目的是实施人员,为了安全操作,不能让其直接修改代码.
    
此时,我们专门为数据库提供一个配置文件,里面专门存储数据库连接相关的信息.

--------------------------------------------------------------------
db.properties
-----------------------------------
#key=value
username=root
password=admin
.......
--------------------------------------------------------------------

现在数据库的连接信息在db.properties文件中,Java代码需要获取该文件中的信息.

重心转移: Java代码如何加载properties文件,如何获取该文件中的数据.

必须使用Properties(Hashtable的子类,Map接口的实现类).

数据流

随机访问文件(RandomAccessFile)

管道流

NIO

IO流总结

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

达帮主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值