赞
踩
目录
汉字:GBK编码占用2字节 UTF-8占用3字节,且第一个字节必定为负数,第一个字节为负数表示这里为汉字,这就是为什么字节流也可以进行汉字的识别
因为字节流编码每次读取一个字节,所以汉字使用字节流时无法识别,因此使用字符流
字符流=字节流+编码表
按照某种规则,将字符存储到计算机中,称为编码,将计算机中的二进制数按规则解析出来,称为解码。按A编码存储,则必须按A编码解析,否则会导致乱码。这种对应关系规则称为编码表
字符编码:一套自然语言的编码与二进制数之间的对应关系
字符集:表示一个系统支持的所有字符的集合,包括个国家文字,标点符号,图形符号,数字等。计算机想要存储和识别个字符集合,就必须要进行字符编码,一套字符集必定包括至少一套字符编码。常见字符集有ASCII字符集,GBXXX字符集,Unicode字符集
ASCII字符集:美国信息交换标准代码,用于显示现代英文,包括控制字符(转义字符)和可显示字符(英文,数字,西文符号)。7位表示一个字符,共127字符,其扩展集8位表示一个字符,共255个
GBXXX字符集:GB2312:两个小于127的字符连接在一起表示一个汉字,还包括了日本假名,罗马希腊字母等,而ASCII码中本来的数字,标点,字母也以两个字节编入,就称为全角,原来的127以下的字符称为半角。GBK(ANSI):最常用的中文码表,在GB2312基础上的扩展,同时兼容繁体汉字以及日韩汉字。GB18030:最新的中文码表,采用多字节编码,一个汉字由1,2或4个字节组成,支持了少数民族的文字
Unicode字符集:为表达任意语言的任意字符而设计,为业界的统一标准,也称为统一码或万国码。用4个字节表达字母,数字或文字。有三种方案:UTF-8,UTF-16,UTF32(相当于Unicode实现类),其中UTF-8最常用
UTF-8:电子邮件,网页等中优先采用的编码。编码规则:128个ASCII码用一个字节表示,拉丁文用两个字节编码,大部分常用字(含汉字)三个字节编码,其他极少使用的辅助字符四个字节编码。
String中getBytes()方法:无参,返回byte[]数组,使用默认字符集将字符串编码
带一个字符串参数,返回byte[]数组,表示按参数的编码格式进行编码
String的构造方法,参数为byte[],按默认字符集对传入的参数解码,构造新的字符串
参数为byte[]和字符串,按参数的编码格式对传入的参数解码,构造新的字符串
解决字节流读取包括汉字的文本时乱码的问题,字符流按字符(char类型)为单位进行读取
基类:Reader:字符输入流抽象类 Writer:字符输出流的抽象类
子类:InputStreamReader和OutputStreamWriter
底层为FileInputSteam+平台默认编码。自带缓冲区
InputStreamReader的子类,名字简单,不容易写错,一般使用这个读
构造方法:参数为文件路径名,或File对象
read参数为char数组类型或无参(返回为int)
底层为FileOutputSteam+平台默认编码。自带缓冲区
OutputStreamWriter的子类,名字简单,不容易写错,一般使用这个写
构造方法:参数为文件路径名,或File对象,可以加个boolean,表示是否为追加写入
这两种方法不指定字符流的编码解码问题
write有五个重载:参数为char数组类型或参数为int或char数组的一部分或字符串或字符串的一部分
flush()方法,无参数,无返回值,刷新流,用于刷新输入的信息,将字符流的缓冲数据写入目标文件。因为字符流相比于字节流有缓冲(默认为8192长度),不刷新无法写入文档。可以继续调用write写入内容
close()方法,在关闭字符流之前会进行一次刷新,关流后无法继续写入内容
FileReader和FileWriter不能指定编码格式,只能是平台默认编码,如果想要读取其他编码格式的文件或者编写其他格式的文件,使用转换流
InputStreamReader
字节流到字符流的桥梁,读取字节,并按指定的charset解码为字符。字符集可以由名称指定,可以被明确指定,也可以为默认字符集
构造方法:参数为输入字节流对象,可以带一个字符串用来指定编码格式
和字节流读数据成员方法相同
read参数为char数组类型或无参(返回为int)
只用关转换流,关联流会自动关闭
OutputStreamWriter
字符流到字节流的桥梁,将写入的字符编码为字节。字符集可以由名称指定,可以被明确指定,也可以为默认字符集
构造方法:参数为输出字节流对象,可以带一个字符串用来指定编码格式
write()五个重载方法:int写入一个字符,char[]写入字符数组,char[],int off,int len写入数组一部分,String写入字符串,String,int off,int len写入字符串一部分
flush()方法,无参数,无返回值,刷新流,用于刷新输入的信息。因为字符流相比于字节流有缓冲,不刷新无法写入文档
close()方法,在关闭字符流之前会进行一次刷新
字符缓冲流,相当于多级缓存
构造方法:参数为字符输入流对象(FileReader),重载指定缓存区大小
readLine(),无参数,返回String类型,读取一行文字,不包含任何终止字符(如换行符),可以采用println方法手动打印换行,到达结尾时,为null
构造方法:参数为字符输出流对象(FileWriter),重载指定缓存区大小
newLine(),无参数,无返回值,写入一行行分隔符,由系统属性定义(windows为\r\n),便于适应不同的操作系统
缓冲流不能调用flush,只需要关缓冲流对象
标准输入输出流
System的in静态成员变量,InputStream类型,该流打开准备输入数据,用于键盘输入或主机环境或用户指定的另一个输入源
是字节流对象,想要转换为字符流,用转换流:InputStreamReader,之后再用字符流创建字符缓冲流进行操作,最好转化为Buffered字符缓冲流,但这样键盘输入太麻烦,Java就有了Scanner类
out静态成员变量,OutputStream类型,该流打开用于输出数据,用于显示输出或由主机环境或用户指定的另一个输出目标
为PrintStream字节输出流的对象,可以方便的打印各种数据,System.out.print不能不带参使用
字节打印流:PrintStream 字符打印流:printWrite
实际上为字节/字符输出流,用来写数据
构造方法:参数File类型或String类型,表示写入数据的文件的路径
成员方法:除了write方法外,还有独特的print的方法,特有的print方法写什么打印什么,write会转换为字符(转码)
继承writer,包装设计模式,8个构造
构造方法:参数为字符串表示路径,可以再带一个String指定编码表,不会自动刷新。
参数为Writer和boolean,如果传入真,则在println,printf和format方法会自动刷新输出缓冲区
成员方法:print(),println()参数什么输出什么,原样输出
write()不能原样输出,数字转化为字符
将对象保存到磁盘中,或者在网络中传输对象
用一个字节序列表示一个对象,包括对象的类型,对象的数据和对象中的属性等信息,相当于文件中持久保存了一个对象的信息,如果流是网络套接字流,则可以在另一个主机上或另一个进程中重构对象
反之,可以将该字节序列读取出来,重构对象,进行反序列化
对象序列化流:ObjectOutPutStream继承自OutPutStream(把对象写到文件)
构造方法:参数为字节输出流的对象
成员方法:writeObject()参数为Object类对象,即所有指定的对象,无返回值,用于将对象写入对象序列化流
想要实现对象的序列化和反序列化,必须要将对象的类实现Serializable这个接口,这个接口只是标识接口,没有方法需要重写
对象反序列化流:ObjectInPutStream继承自InputStream,用于将序列化的对象反序列化(把对象读入内存)
成员方法:readObject(),无参数,返回Object类,即对象,从目标文件中读取一个对象,读取出来之后可以对Object类进行向下转型,转为想要的类型
如果想要读取多个对象,使用avaliable方法判断是否还有字节
在对象序列化之后,改变了对象的类文件,再进行反序列化会抛出异常,原因时串行版本和从流中读取的类描述不符。
序列化时会与每个可序列化的类关联一个版本号(存入.class文件中),称为serialVersionUID,如果反序列化时UID不同,就会抛出异常
解决方案:显示声明seialVersionUID,在类的开始部分写(任意访问修饰符,建议private) static final long seialVersionUID=42L,42L可以修改
如果类的某些成员变量不想被发现,可以在变量类型之前加上transient关键字(瞬态)修饰或者使用static(静态)修饰,使得这个成员变量不参与序列化过程(提取出来为默认初始化值)
第三方jar包,jar包本质上就是压缩包,可以被idea直接识别。第一方:java官方(Oracle)第二方:我们自身 第三方:jar包的提供者。
Commons IO由apache基金组织提供,免费开源,该组织还提供了Commons-DBUtils(用于JDBC的简化),tomcat(Web服务器软件),hadoop(大数据),commons-beanUtils(简化数据封装)
导包步骤:1.在idea的模块下创建lib文件夹 2.将jar包复制到lib文件夹中 3.右键jar包添加为Libray,Level选择jar包的使用范围(一般为模块下)
我们主要使用FileUtiles和 IOUtils类中的方法
IOUtils类
copy()参数为InputStream和OutputStream对象,无返回值,将InputStream关联项目复制到OutPutStream关联的文件
closeQuietly()参数为流对象,无返回值,每次只能关闭一个流
FileUtiles类
copyDirectoryToDirectory()参数为File和File,无返回值,将源文件夹复制到目标文件夹
writeStringToFile()参数为File和和String,无返回值,将字符串写入目标文件
readFileToString(),参数为File,返回String,将目标文件读入字符串后返回
deleteDirectory()参数为File,无返回值,删除文件夹
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。