博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[零基础学JAVA]Java SE应用部分-30.Java IO操作(04)
阅读量:5999 次
发布时间:2019-06-20

本文共 1942 字,大约阅读时间需要 6 分钟。

上季内容回顾:
System.out --> PrintStream的一个实例化对象,本身具备了向屏幕上打印的功能,之后又讲解了可以使用OutputStream类向屏幕上进行输出的实例。
本季目标: 
1、System.in 
2、缓冲流 
3、对象序列化
System.in对应的是键盘的输入 
public static final InputStream in 
只是现在不是像之前那样是从文件中读了,而是从键盘上读数据了。
看下效果:
以上的程序虽然可以输入内容,但是会存在一个问题: 
首先程序开辟了一段空间,如果现在假设输入的内容大于开辟的空间,那会如何呢?
看下效果:
如果要是长度大于设置好的长度,则肯定有内容无法读取进来,最好的方法就是给不设置长度,如果有内容就继续读。
看下效果:
采用判断是否读到底的方式完成,确实没有长度的限制了,但是也存在了另外一个问题如果输入中文,则肯定出现乱码? 
最好的解决方法是设置一个缓冲区,所有的内容放到缓冲区中一次性读出来。 
此缓冲区最好是为字符缓冲区 —— 
BufferedReader 
public BufferedReader(Reader in) 
此处必须接收一个Reader的对象,但是System.in实际上是InputStream类的对象
字节流与字符流的转换
Reader和Writer本身使用到了缓冲:
Writer --> OutputStreamWriter --> FileWriter
结论: 
· 在物理上存放的肯定永远是字节流 
· 读到程序之中才会形成字符流
得出完整的输入数据的代码形式:
现在看下最终效果:
以上为标准的格式,我们现在使用此种格式完成一个功能,输入两个整数之后计算两个数字的相加结果。
字符集
GBK:是包含了简体中文和繁体中文的字库 
GB2312:是只包含了简体中文的字库 
ISO8859-1:是一个国际的通用编码
 
在系统中都有一个默认的编码方式。 
如果知道当前系统的默认编码呢?接着看下面哈~
默认的编码方式就是GBK,那么问,如果现在系统的编码为GBK,而我使用ISO 进行编码,能正确解释出来吗?
 
字符乱码怎么解决 —— 跟系统设置的编码一致就OK了。
SequenceInputStream类
SequenceInputStream用于文件合并
看下合并后的效果:
对象序列化
实际上使用的是两个类: 
· ObjectOutputStream 
· ObjectInputStream
Serializable接口的作用: 
只是一个标识接口,表示你这个类的对象允许被序列化 
ObjectOutputStream类的构造方法,接收一个OutputStream类的实例化对象,以表示到底向那里保存。 
public final void writeObject(Object obj) throws IOException
ObjectInputStream类的构造方法 
public final Object readObject() throws IOException,ClassNotFoundException
下面进行反序列化(从文件中恢复对象)
看下效果:从文件中读取对象
对象序列化实际上更准确的来说指的是对象可以变为字节流。
transient关键字
当不希望类中的某个字段被序列化的时候,应用transient表示这个字段
看下效果:
总结 
OutputStream:字节的输出流类 
|- FileOutputStream 
|- ObjectOutputStream 
|- ByteArrayOutputStream 
|- PipedOutputStream 
|- PrintStream
 
InputStream:字节的输入流类 
|- FileInputStream 
|- ObjectInputStream 
|- ByteArrayInputStream 
|- PipedInputStream
 
Reader:字符流的输入类 
|- InputStreamReader 
|- FileReader 
|- BufferedReader
 
Writer:字符流的输出类 
|- OutputStreamWriter 
|- FileWriter 
|- PrintWirter
 
File类: 
Serializable接口
#######################################################
本文转自redking51CTO博客,原文链接:
http://blog.51cto.com/redking/133963
,如需转载请自行联系原作者
你可能感兴趣的文章
自定义BroadcastReceiver
查看>>
log4j DatePattern格式
查看>>
my paramiko class
查看>>
XML文件解析
查看>>
我的友情链接
查看>>
UIButton如何正确调整imageView及titleLabel的位置
查看>>
mysql主从复制
查看>>
AIX 基础笔记2
查看>>
级联引用完整性约束
查看>>
Linux目录架构详解
查看>>
Add DHCP Reservations in a batch with a Script
查看>>
Service与Android系统实现(1)-- 应用程序里的Service
查看>>
用JavaScript开发的桌面应用
查看>>
curl指令的使用
查看>>
我的友情链接
查看>>
Linux常用命令—egrep及扩展正则表达式
查看>>
为什么使用xfs
查看>>
THINKPHP 结合阿里大于发送短信
查看>>
网站故障排查常用命令
查看>>
Python setdaemon守护进程
查看>>