java面试(4)--java流 socket

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生命一个实例变量,当对象存储时它的值不需要维持)代表临时数据,因此声明为这两种类型的数据是不能被序列化的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值