16 为什么会有IO流?
2016-08-20 06:46
197 查看
为什么会有IO流,及如何使用?
数据要传输,必定会有输入端与输出端。在java中,数据分为:基本数据类型和引用数据类型。
基本数据类型
基本数据类型,计算机只能识别0与1,这些是byte字节。由此就有了字节流,换句话说,任何数据都可以通过字节流进行传输。
然而,在传输的过程中,会遇到一些问题。
e.g. 乱码!
乱码是因为在传输字符时,只读取到了一半的字节,字节码有11111111时,也就是-1码时,传输中止,为此,将read()读取的方法设定为每读一次返回的是一个字节,但不用byte接收,而用int接收。
为了彻底的避免乱码的问题,以及提高传输效率,则有了字符流。但字符流只用于操作纯文本的文件。因为当字符流拷贝非纯文本时,需要先将字节转换成字符,但转换字符如果没有成功,则会变成?,写出去的时候就会将?写出,也会出现乱码。
从此,化分两道:字节流与字符流。
字节流继承于:InputStream, OutputStream
字符流继承于:Reader, Writer
引用数据类型
引用数据对象继承于:ObjectInputStream, ObjectOutputStream对象必须序列化Serializable,输出流序列化写出对象,输入流则反序列化。
若有多个对象,可将多个对象放入一个集合中,写入ArrayList();
读取时,读入一次即可。
如何使用?
基本数据类型:逐个字节拷贝(不太推荐,因效率太低)
定义一个数组,1024的整数倍(推荐使用)
带Buffer的拷贝(推荐使用)
引用数据类型:
序列化与反序列化
相关文章推荐
- C++ STL IO流 与 Unicode (UTF-16 UTF-8) 的协同工作
- C++ STL IO流 与 Unicode (UTF-16 UTF-8) 的协同工作
- stm32为什么给有些寄存器赋值确不会影响其他位?USARTx->SR = (uint16_t)~USART_FLAG
- 8086段地址为什么是16的倍数?
- Java基础知识强化之IO流笔记16:IO流的概述和分类
- JAVASE----16----IO流_3
- 80x86为什么要求数据段的起始地址必须为16的倍数?
- 为什么 C++ 中成员函数指针是 16 字节?
- java的IO流四_16
- 为什么 C++ 中成员函数指针是 16 字节?
- 为什么 C++ 中成员函数指针是 16 字节?
- 文件模式JAVASE----16----IO流_3
- HashMap的默认长度为什么是16?
- 今天无意中发现JavaBean类基本都要求实现了Serializable接口,以前只是知道序列化以后,可以通过io流的方式将对象序列化和反序列化,进行存取,但不知道为什么需要序列化,今天总结一下
- 为什么char数组要占16的倍数内存
- 黑马程序员_Java学习日记16_IO流4
- 枚举值为什么使用1,2,4,8,16,32等2…
- 黑马程序员16——IO流3
- Item 16:为什么要使用同样的形式来new和delete Effective C++笔记
- Java基础(16):IO流—采用RandomAccessFile类读写文件,功能更强