[零基础学JAVA]Java SE应用部分-30.Java IO操作(04)

简介:
上季内容回顾:
System.out --> PrintStream的一个实例化对象,本身具备了向屏幕上打印的功能,之后又讲解了可以使用OutputStream类向屏幕上进行输出的实例。
本季目标: 
1、System.in 
2、缓冲流 
3、对象序列化
System.in对应的是键盘的输入 
public static final InputStream in 
只是现在不是像之前那样是从文件中读了,而是从键盘上读数据了。
image
看下效果:
image
以上的程序虽然可以输入内容,但是会存在一个问题: 
首先程序开辟了一段空间,如果现在假设输入的内容大于开辟的空间,那会如何呢?
image
看下效果:
image
如果要是长度大于设置好的长度,则肯定有内容无法读取进来,最好的方法就是给不设置长度,如果有内容就继续读。
image
看下效果:
image
采用判断是否读到底的方式完成,确实没有长度的限制了,但是也存在了另外一个问题如果输入中文,则肯定出现乱码? 
最好的解决方法是设置一个缓冲区,所有的内容放到缓冲区中一次性读出来。 
此缓冲区最好是为字符缓冲区 ——  BufferedReader 
public BufferedReader(Reader in) 
此处必须接收一个Reader的对象,但是System.in实际上是InputStream类的对象
字节流与字符流的转换
image
Reader和Writer本身使用到了缓冲: Writer --> OutputStreamWriter --> FileWriter
结论: 
· 在物理上存放的肯定永远是字节流 
· 读到程序之中才会形成字符流
得出完整的输入数据的代码形式:
image
现在看下最终效果:
image
以上为标准的格式,我们现在使用此种格式完成一个功能,输入两个整数之后计算两个数字的相加结果。
image
image
字符集
image
GBK:是包含了简体中文和繁体中文的字库 
GB2312:是只包含了简体中文的字库 
ISO8859-1:是一个国际的通用编码
 
在系统中都有一个默认的编码方式。 
image
image
如果知道当前系统的默认编码呢?接着看下面哈~
image
image
默认的编码方式就是GBK,那么问,如果现在系统的编码为GBK,而我使用ISO 进行编码,能正确解释出来吗?
image
image 
字符乱码怎么解决 —— 跟系统设置的编码一致就OK了。
SequenceInputStream类
image
SequenceInputStream用于文件合并
image
看下合并后的效果:
image
对象序列化
image
实际上使用的是两个类: 
· ObjectOutputStream 
· ObjectInputStream
Serializable接口的作用: 
只是一个标识接口,表示你这个类的对象允许被序列化 
ObjectOutputStream类的构造方法,接收一个OutputStream类的实例化对象,以表示到底向那里保存。 
public final void writeObject(Object obj) throws IOException
ObjectInputStream类的构造方法 
public final Object readObject() throws IOException,ClassNotFoundException
image
image
image
下面进行反序列化(从文件中恢复对象)
image
看下效果:从文件中读取对象
image
对象序列化实际上更准确的来说指的是对象可以变为字节流。
transient关键字
当不希望类中的某个字段被序列化的时候,应用transient表示这个字段
image
看下效果:
image
总结 
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 ,如需转载请自行联系原作者

相关文章
|
20天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【4月更文挑战第3天】在移动开发领域,性能优化一直是开发者关注的焦点。随着Kotlin的兴起,其在Android开发中的地位逐渐上升,但关于其与Java在性能方面的对比,尚无明确共识。本文通过深入分析并结合实际测试数据,探讨了Kotlin与Java在Android平台上的性能表现,揭示了在不同场景下两者的差异及其对应用性能的潜在影响,为开发者在选择编程语言时提供参考依据。
|
21天前
|
缓存 算法 Java
Java内存管理与调优:释放应用潜能的关键
【4月更文挑战第2天】Java内存管理关乎性能与稳定性。理解JVM内存结构,如堆和栈,是优化基础。内存泄漏是常见问题,需谨慎管理对象生命周期,并使用工具如VisualVM检测。有效字符串处理、选择合适数据结构和算法能提升效率。垃圾回收自动回收内存,但策略调整影响性能,如选择不同类型的垃圾回收器。其他优化包括调整堆大小、使用对象池和缓存。掌握这些技巧,开发者能优化应用,提升系统性能。
|
20天前
|
Java
深入理解Java并发编程:线程池的应用与优化
【4月更文挑战第3天】 在Java并发编程中,线程池是一种重要的资源管理工具,它能有效地控制和管理线程的数量,提高系统性能。本文将深入探讨Java线程池的工作原理、应用场景以及优化策略,帮助读者更好地理解和应用线程池。
|
27天前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
在开发高性能的Android应用时,选择合适的编程语言至关重要。近年来,Kotlin因其简洁性和功能性受到开发者的青睐,但其性能是否与传统的Java相比有所不足?本文通过对比分析Kotlin与Java在Android平台上的运行效率,揭示二者在编译速度、运行时性能及资源消耗方面的具体差异,并探讨在实际项目中如何做出最佳选择。
17 4
|
29天前
|
数据采集 分布式计算 大数据
Java语言在大数据处理中的应用
传统的大数据处理往往依赖于庞大的数据中心和高性能的服务器,然而随着大数据时代的到来,Java作为一种强大的编程语言正在被广泛应用于大数据处理领域。本文将探讨Java语言在大数据处理中的优势和应用,以及其在分布式计算、数据处理和系统集成等方面的重要作用。
|
22小时前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
7 0
|
1天前
|
Java
Java中的并发编程:理解和应用线程池
【4月更文挑战第23天】在现代的Java应用程序中,性能和资源的有效利用已经成为了一个重要的考量因素。并发编程是提高应用程序性能的关键手段之一,而线程池则是实现高效并发的重要工具。本文将深入探讨Java中的线程池,包括其基本原理、优势、以及如何在实际开发中有效地使用线程池。我们将通过实例和代码片段,帮助读者理解线程池的概念,并学习如何在Java应用中合理地使用线程池。
|
5天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
6天前
|
设计模式 算法 Java
Java中的设计模式及其应用
【4月更文挑战第18天】本文介绍了Java设计模式的重要性及分类,包括创建型、结构型和行为型模式。创建型模式如单例、工厂方法用于对象创建;结构型模式如适配器、组合关注对象组合;行为型模式如策略、观察者关注对象交互。文中还举例说明了单例模式在配置管理器中的应用,工厂方法在图形编辑器中的使用,以及策略模式在电商折扣计算中的实践。设计模式能提升代码可读性、可维护性和可扩展性,是Java开发者的必备知识。
|
6天前
|
安全 Java API
函数式编程在Java中的应用
【4月更文挑战第18天】本文介绍了函数式编程的核心概念,包括不可变性、纯函数、高阶函数和函数组合,并展示了Java 8如何通过Lambda表达式、Stream API、Optional类和函数式接口支持函数式编程。通过实际应用案例,阐述了函数式编程在集合处理、并发编程和错误处理中的应用。结论指出,函数式编程能提升Java代码的质量和可维护性,随着Java语言的演进,函数式特性将更加丰富。