java输入输出流(java流体系图)
一切文件在系统中都是以字节的形式保存的,无论是文档文件,视频文件,音频文件。。。,需要读取这些文件都可以用FileInputStream和BufferInutStream
字符流操作的是缓冲区。
带缓冲的字节输入流:上面我们知道文件字节输入流的读取时,是直接同字节流中读取的。由于字节流是与硬件(存储介质)进行的读取,所以速度较慢。而CPU需要使用数据时通过read()、read(byte[])读取数据时就要受到硬件IO的慢速度限制。我们又知道,CPU与内存发生的读写速度比硬件IO快10倍不止,所以优化读写的思路就有了:在内存中建立缓存区,先把存储介质中的字节读取到缓存区中。CPU需要数据时直接从缓冲区读就行了,缓冲区要足够大,在被读完后又触发fill()函数自动从存储介质的文件字节内容中读取字节存储到缓冲区数组。
BufferedInputStream 内部有一个缓冲区,默认大小为8M,每次调用read方法的时候,它首先尝试从缓冲区里读取数据,若读取失败(缓冲区无可读数据),则选择从物理数据源 (譬如文件)读取新数据(这里会尝试尽可能读取多的字节)放入到缓冲区中,最后再将缓冲区中的内容返回给用户.由于从缓冲区里读取数据远比直接从存储介质读取速度快,所以BufferedInputStream的效率很高
InputStreamReader:将字节输入流转换为字符输入流。是字节流通向字符流的桥梁,可以指定字节流转换为字符流的字符集。
管理文件和目录的类,java提供了一个非常重要的类来管理文件和文件夹。(file)
java Socket()
网络上的一个程序通过一个双向的通信连接实现数据交换,这个双向链路的一端称为一个socket,
socket()分为两种类型,一种是面向连接的Socket()通信协议(TCP),和面向无连接通信协议(UDP),任何一个socket都是有ip地址和端号唯一确定。
socket分为三个阶段,分别是,socket打开,socket收发数据和关闭socke.java常用serverSocket来做服务器端,socket来做客户端,来实现网络通信。
在分布式环境下,当进行远程通信时,无论是何种类型的数据,都会以二进制序列的形式在网络上传送,序列化是一种将对象以一连串的字节描述的过程,用于解决在对对象流进行读写操作时所引发的问题。序列化可以将对象的状态写在流里进行网络传输,或者保存到文件,数据库等系统,并在需要的时候把该流读取出来重新构造一个相同的对象。
所有实现序列化的类都必须实现接口Serializable接口。序列化的两个特点,(1)如果一个类能够被序列化,那么它的子类也能够被序列化。(2)由于static(静态)代表类的成员,transient(java语言关键字,如果用transient生命一个实例变量,当对象存储时它的值不需要维持)代表临时数据,因此声明为这两种类型的数据是不能被序列化的。