发表于: 2017-12-25 23:21:58
1 596
今天做的事情:
上午准备小课堂,又复习一遍IO流。
流的概念可能比较抽象,可以想象一下水流的样子。
io在本质上是单个字节的移动,而流可以说是字节移动的载体和方式,它不停的向目标处移动数据,我们要做的就是根据流的方向从流中读取数据或者向流中写入数据。
想象下倒水的场景:倒一杯水,水是连成一片往地上流动,而不是等杯中的水全部倒出悬浮在空中,然后一起掉落地面。最简单的Java流的例子就是下载电影,肯定不是等电影全部下载在内存中再保存到磁盘上,本质上是下载一个字节就保存一个字节。
一个流,必有源和目标,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL。流的方向是重要的,根据流的方向,流可分为两类:输入流和输出流。我们从输入流读取数据,向输出流写入数据。
Java对io的支持主要集中在io包下,显然可以分为下面两类:
- 基于字节操作的io接口:InputStream 和 OutputStream
- 基于字符操作的io接口:Writer 和 Reader
比较重点是这个:
ByteArrayInputStream、CharArrayReader | 为多线程的通信提供缓冲区操作功能。常用于读取网络中的定长数据包 |
ByteArrayOutputStream、CharArrayWriter | 为多线程的通信提供缓冲区操作功能。常用于接收足够长度的数据后进行一次性写入 |
FileInputStream、FileReader | 把文件写入内存作为输入流,实现对文件的读取操作 |
FileOutputStream、FileWriter | 把内存中的数据作为输出流写入文件,实现对文件的写操作 |
StringReader | 读取String的内容作为输入流 |
StringWriter | 将数据写入一个String |
SequenceInputStream | 将多个输入流中的数据合并为一个数据流 |
PipedInputStream、PipedReader、PipedOutputStream、PipedWriter | 管道流,主要用于2个线程之间传递数据 |
ObjectInputStream | 读取对象数据作为输入流,对象中的 transient 和 static 类型的成员变量不会被读取或写入 |
ObjectOutputStream | 将数据写入对象 |
FilterInputStream、FilterOutputStream、FilterReader、FilterWriter | 过滤流通常源和目标是其他的输入输出流,大家可以看到有众多的子类,各有用途,就不一一介绍了 |
可以说把上面这个表中的类熟悉之后,对I/O流是了如指掌。
还有一个扩展点,关于Socket , 当你用QQ进行聊天时,QQ进程如何与服务器或你好友所在的QQ通信?这些靠socket吗?什么是scoket?
- 3.1、socket()函数
- 3.2、bind()函数
- 3.3、listen()、connect()函数
- 3.4、accept()函数
- 3.5、read()、write()函数等
- 3.6、close()函数
本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类:
- 消息传递(管道、FIFO、消息队列)
- 同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)
- 共享内存(匿名的和具名的)
- 远程过程调用(Solaris门和Sun RPC)
还有看了一篇关单点登陆的博客。
简介:单点登陆,(Single Sign On ,简称SSO)是目前比较行的服务于企业业务整合的解决意思之一,SSO使得多个应用中,用户只需要登录一次就可以所有相互信任的应用系统。
本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类:
- 消息传递(管道、FIFO、消息队列)
- 同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)
- 共享内存(匿名的和具名的)
- 远程过程调用(Solaris门和Sun RPC)
遇到的问题:
无
收获:
了解IO流,Socket, SSO
评论