From d30a11d6b9b5698f72089a68fb165a580defd24d Mon Sep 17 00:00:00 2001 From: Snailclimb Date: Sun, 13 May 2018 11:44:26 +0800 Subject: [PATCH 01/10] Update README.md --- README.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index dedc02fc..94a5368c 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,24 @@ 在我们学习Java的时候,很多人会面临我不知道继续学什么或者面试会问什么的尴尬情况(我本人之前就很迷茫)。所以,我决定通过这个开源平台来帮助一些有需要的人,通过下面的内容,你会掌握系统的Java学习以及面试的相关知识。本来是想通过Gitbook的形式来制作的,后来想了想觉得可能有点大题小做。另外,我自己一个人的力量毕竟有限,希望各位有想法的朋友可以提issue。 # Java -> ### Java基础 -[Java基础知识学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.md) +- ### Java基础 +[Java基础知识学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java/Java%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.md) -> ### Java多线程系列 -[多线程系列学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%B3%BB%E5%88%97.md) +- ### Java多线程系列 +[多线程系列学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java/%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%B3%BB%E5%88%97.md) -> ### Java虚拟机(jvm) -[Java虚拟机(jvm)知识学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java%E8%99%9A%E6%8B%9F%E6%9C%BA%EF%BC%88jvm%EF%BC%89.md) +- ### Java NIO + +- ### Java虚拟机(jvm) +[Java虚拟机(jvm)知识学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java/Java%E8%99%9A%E6%8B%9F%E6%9C%BA%EF%BC%88jvm%EF%BC%89.md) # 数据结构与算法 -> ### 数据结构 +- ### 数据结构 [数据结构知识学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84.md) -> ### 算法 +- ### 算法 [算法学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/%E7%AE%97%E6%B3%95.md) From d561b62e27c47c770e158f0a8a61364e68e4b908 Mon Sep 17 00:00:00 2001 From: Snailclimb Date: Sun, 13 May 2018 11:45:39 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=96=87=E7=AB=A0?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 94a5368c..8c53d191 100644 --- a/README.md +++ b/README.md @@ -2,27 +2,27 @@ # Java - ### Java基础 -[Java基础知识学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java/Java%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.md) + [Java基础知识学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java/Java%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.md) - ### Java多线程系列 -[多线程系列学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java/%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%B3%BB%E5%88%97.md) + [多线程系列学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java/%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%B3%BB%E5%88%97.md) - ### Java NIO - ### Java虚拟机(jvm) -[Java虚拟机(jvm)知识学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java/Java%E8%99%9A%E6%8B%9F%E6%9C%BA%EF%BC%88jvm%EF%BC%89.md) + [Java虚拟机(jvm)知识学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java/Java%E8%99%9A%E6%8B%9F%E6%9C%BA%EF%BC%88jvm%EF%BC%89.md) # 数据结构与算法 - ### 数据结构 -[数据结构知识学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84.md) + [数据结构知识学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84.md) - ### 算法 -[算法学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/%E7%AE%97%E6%B3%95.md) + [算法学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/%E7%AE%97%E6%B3%95.md) # 计算机网络 -[计算机网络学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.md) + [计算机网络学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.md) From dc5cd45089a7fcbfc2222a78536de5a27363870a Mon Sep 17 00:00:00 2001 From: Snailclimb Date: Tue, 15 May 2018 09:37:03 +0800 Subject: [PATCH 03/10] =?UTF-8?q?Update=20Java=E8=99=9A=E6=8B=9F=E6=9C=BA?= =?UTF-8?q?=EF=BC=88jvm=EF=BC=89.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Java/Java虚拟机(jvm).md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Java/Java虚拟机(jvm).md b/Java/Java虚拟机(jvm).md index 3f2cf499..7f245971 100644 --- a/Java/Java虚拟机(jvm).md +++ b/Java/Java虚拟机(jvm).md @@ -1,6 +1,6 @@ 最近看书的过程中整理了一些面试题,面试题以及答案都在我的文章中有所提到,希望你能在以问题为导向的过程中掌握虚拟机的核心知识。面试毕竟是面试,核心知识我们还是要掌握的,加油~~~ -下面是按jvm虚拟机知识点分章节总结的一些jvm学习与面试相关的一些东西。一般作为Java程序员在面试的时候一般会问的大多就是**Java内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM内存管理**这些问题了。这些内容参考周的《深入理解Java虚拟机》中第二章和第三章就足够了对应下面的[深入理解虚拟机之Java内存区域:](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzU4NDQ4MzU5OA%3D%3D%26mid%3D2247483910%26idx%3D1%26sn%3D246f39051a85fc312577499691fba89f%26chksm%3Dfd985467caefdd71f9a7c275952be34484b14f9e092723c19bd4ef557c324169ed084f868bdb%23rd)和[深入理解虚拟机之垃圾回收](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzU4NDQ4MzU5OA%3D%3D%26mid%3D2247483914%26idx%3D1%26sn%3D9aa157d4a1570962c39783cdeec7e539%26chksm%3Dfd98546bcaefdd7d9f61cd356e5584e56b64e234c3a403ed93cb6d4dde07a505e3000fd0c427%23rd)这两篇文章。 +下面是按jvm虚拟机知识点分章节总结的一些jvm学习与面试相关的一些东西。一般作为Java程序员在面试的时候一般会问的大多就是**Java内存区域、虚拟机垃圾算法、虚拟机垃圾收集器、JVM内存管理**这些问题了。这些内容参考周的《深入理解Java虚拟机》中第二章和第三章就足够了对应下面的[深入理解虚拟机之Java内存区域:](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzU4NDQ4MzU5OA%3D%3D%26mid%3D2247483910%26idx%3D1%26sn%3D246f39051a85fc312577499691fba89f%26chksm%3Dfd985467caefdd71f9a7c275952be34484b14f9e092723c19bd4ef557c324169ed084f868bdb%23rd)和[深入理解虚拟机之垃圾回收](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzU4NDQ4MzU5OA%3D%3D%26mid%3D2247483914%26idx%3D1%26sn%3D9aa157d4a1570962c39783cdeec7e539%26chksm%3Dfd98546bcaefdd7d9f61cd356e5584e56b64e234c3a403ed93cb6d4dde07a505e3000fd0c427%23rd)这两篇文章。 [深入理解虚拟机之Java内存区域:](https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzU4NDQ4MzU5OA%3D%3D%26mid%3D2247483910%26idx%3D1%26sn%3D246f39051a85fc312577499691fba89f%26chksm%3Dfd985467caefdd71f9a7c275952be34484b14f9e092723c19bd4ef557c324169ed084f868bdb%23rd) From f63f5e9badabf7edc3e7184b257c1a33f2ce6306 Mon Sep 17 00:00:00 2001 From: Snailclimb Date: Tue, 15 May 2018 20:31:12 +0800 Subject: [PATCH 04/10] Update Java NIO.md --- Java/Java NIO.md | 73 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 69 insertions(+), 4 deletions(-) diff --git a/Java/Java NIO.md b/Java/Java NIO.md index 97ad5274..4f248e70 100644 --- a/Java/Java NIO.md +++ b/Java/Java NIO.md @@ -1,8 +1,73 @@ +由于内容比较多,我下面放的是我更新在我的微信公众号上的链接,微信排版比较好看,更加利于阅读。每一篇文章下面我都把文章的主要内容给列出来了,便于大家学习与回顾。 -## 一些教程 +### [Java NIO 概览](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483956&idx=1&sn=57692bc5b7c2c6dfb812489baadc29c9&chksm=fd985455caefdd4331d828d8e89b22f19b304aa87d6da73c5d8c66fcef16e4c0b448b1a6f791#rd) -- ### 博客/文档 +### 主要内容: +1. **NIO简介**: -- ### 视频 + Java NIO 是 java 1.4, 之后新出的一套IO接口NIO中的N可以理解为Non-blocking,不单纯是New。 -- ### 书籍 \ No newline at end of file +2. **NIO的特性/NIO与IO区别:** + - 1)IO是面向流的,NIO是面向缓冲区的; + - 2)IO流是阻塞的,NIO流是不阻塞的; + - 3)NIO有选择器,而IO没有。 +3. **读数据和写数据方式:** + - 从通道进行数据读取 :创建一个缓冲区,然后请求通道读取数据。 + + - 从通道进行数据写入 :创建一个缓冲区,填充数据,并要求通道写入数据。 + +4. **NIO核心组件简单介绍** + - **Channels** + - **Buffers** + - **Selectors** + + +### [Java NIO 之 Buffer(缓冲区)](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483961&idx=1&sn=f67bef4c279e78043ff649b6b03fdcbc&chksm=fd985458caefdd4e3317ccbdb2d0a5a70a5024d3255eebf38183919ed9c25ade536017c0a6ba#rd) + +### 主要内容: +1. **Buffer(缓冲区)介绍:** + - Java NIO Buffers用于和NIO Channel交互。 我们从Channel中读取数据到buffers里,从Buffer把数据写入到Channels; + - Buffer本质上就是一块内存区; + - 一个Buffer有三个属性是必须掌握的,分别是:capacity容量、position位置、limit限制。 +2. **Buffer的常见方法** + - Buffer clear() + - Buffer flip() + - Buffer rewind() + - Buffer position(int newPosition) +3. **Buffer的使用方式/方法介绍:** + - 分配缓冲区(Allocating a Buffer): + ```java + ByteBuffer buf = ByteBuffer.allocate(28);//以ByteBuffer为例子 + ``` + - 写入数据到缓冲区(Writing Data to a Buffer) + + **写数据到Buffer有两种方法:** + + 1.从Channel中写数据到Buffer + ```java + int bytesRead = inChannel.read(buf); //read into buffer. + ``` + 2.通过put写数据: + ```java + buf.put(127); + ``` + +4. **Buffer常用方法测试** + + 说实话,NIO编程真的难,通过后面这个测试例子,你可能才能勉强理解前面说的Buffer方法的作用。 + + +### [Java NIO 之 Channel(通道)](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483966&idx=1&sn=d5cf18c69f5f9ec2aff149270422731f&chksm=fd98545fcaefdd49296e2c78000ce5da277435b90ba3c03b92b7cf54c6ccc71d61d13efbce63#rd) +1. **Channel(通道)介绍** + - 通常来说NIO中的所有IO都是从 Channel(通道) 开始的。 + - NIO Channel通道和流的区别: +2. **FileChannel的使用** +3. **SocketChannel和ServerSocketChannel的使用** +4. **️DatagramChannel的使用** +5. **Scatter / Gather** + - Scatter: 从一个Channel读取的信息分散到N个缓冲区中(Buufer). + - Gather: 将N个Buffer里面内容按照顺序发送到一个Channel. +6. **通道之间的数据传输** + - 在Java NIO中如果一个channel是FileChannel类型的,那么他可以直接把数据传输到另一个channel。 + - transferFrom() :transferFrom方法把数据从通道源传输到FileChannel + - transferTo() :transferTo方法把FileChannel数据传输到另一个channel From 0d80ab7ea58860b35322de2af32cc3acdb6ca2e0 Mon Sep 17 00:00:00 2001 From: Snailclimb Date: Tue, 15 May 2018 20:36:36 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Java=20NIO=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8c53d191..24b420ed 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,13 @@ [多线程系列学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java/%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%B3%BB%E5%88%97.md) - ### Java NIO - + [Java NIO系列学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java/Java%20NIO.md) + - ### Java虚拟机(jvm) [Java虚拟机(jvm)知识学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java/Java%E8%99%9A%E6%8B%9F%E6%9C%BA%EF%BC%88jvm%EF%BC%89.md) # 数据结构与算法 - + - ### 数据结构 [数据结构知识学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84.md) @@ -23,6 +24,7 @@ # 计算机网络 +- ### 网络相关 [计算机网络学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.md) From c273931e238a757f2d5ed6c93603d718538bfe90 Mon Sep 17 00:00:00 2001 From: Snailclimb Date: Wed, 16 May 2018 14:28:20 +0800 Subject: [PATCH 06/10] Update Java NIO.md --- Java/Java NIO.md | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/Java/Java NIO.md b/Java/Java NIO.md index 4f248e70..1025ea88 100644 --- a/Java/Java NIO.md +++ b/Java/Java NIO.md @@ -1,6 +1,6 @@ 由于内容比较多,我下面放的是我更新在我的微信公众号上的链接,微信排版比较好看,更加利于阅读。每一篇文章下面我都把文章的主要内容给列出来了,便于大家学习与回顾。 -### [Java NIO 概览](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483956&idx=1&sn=57692bc5b7c2c6dfb812489baadc29c9&chksm=fd985455caefdd4331d828d8e89b22f19b304aa87d6da73c5d8c66fcef16e4c0b448b1a6f791#rd) +### [一 Java NIO 概览](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483956&idx=1&sn=57692bc5b7c2c6dfb812489baadc29c9&chksm=fd985455caefdd4331d828d8e89b22f19b304aa87d6da73c5d8c66fcef16e4c0b448b1a6f791#rd) ### 主要内容: 1. **NIO简介**: @@ -22,7 +22,7 @@ - **Selectors** -### [Java NIO 之 Buffer(缓冲区)](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483961&idx=1&sn=f67bef4c279e78043ff649b6b03fdcbc&chksm=fd985458caefdd4e3317ccbdb2d0a5a70a5024d3255eebf38183919ed9c25ade536017c0a6ba#rd) +### [二 Java NIO 之 Buffer(缓冲区)](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483961&idx=1&sn=f67bef4c279e78043ff649b6b03fdcbc&chksm=fd985458caefdd4e3317ccbdb2d0a5a70a5024d3255eebf38183919ed9c25ade536017c0a6ba#rd) ### 主要内容: 1. **Buffer(缓冲区)介绍:** @@ -57,7 +57,7 @@ 说实话,NIO编程真的难,通过后面这个测试例子,你可能才能勉强理解前面说的Buffer方法的作用。 -### [Java NIO 之 Channel(通道)](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483966&idx=1&sn=d5cf18c69f5f9ec2aff149270422731f&chksm=fd98545fcaefdd49296e2c78000ce5da277435b90ba3c03b92b7cf54c6ccc71d61d13efbce63#rd) +### [三 Java NIO 之 Channel(通道)](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483966&idx=1&sn=d5cf18c69f5f9ec2aff149270422731f&chksm=fd98545fcaefdd49296e2c78000ce5da277435b90ba3c03b92b7cf54c6ccc71d61d13efbce63#rd) 1. **Channel(通道)介绍** - 通常来说NIO中的所有IO都是从 Channel(通道) 开始的。 - NIO Channel通道和流的区别: @@ -71,3 +71,32 @@ - 在Java NIO中如果一个channel是FileChannel类型的,那么他可以直接把数据传输到另一个channel。 - transferFrom() :transferFrom方法把数据从通道源传输到FileChannel - transferTo() :transferTo方法把FileChannel数据传输到另一个channel + + +### [四 Java NIO之Selector(选择器)](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483966&idx=1&sn=d5cf18c69f5f9ec2aff149270422731f&chksm=fd98545fcaefdd49296e2c78000ce5da277435b90ba3c03b92b7cf54c6ccc71d61d13efbce63#rd) +1. **Selector(选择器)介绍** + - Selector 一般称 为选择器 ,当然你也可以翻译为 多路复用器 。它是Java NIO核心组件中的一个,用于检查一个或多个NIO Channel(通道)的状态是否处于可读、可写。如此可以实现单线程管理多个channels,也就是可以管理多个网络链接。 + - 使用Selector的好处在于: 使用更少的线程来就可以来处理通道了, 相比使用多个线程,避免了线程上下文切换带来的开销。 +2. **Selector(选择器)的使用方法介绍** + - Selector的创建 + ```java + Selector selector = Selector.open(); + ``` + - 注册Channel到Selector(Channel必须是非阻塞的) + ```java + channel.configureBlocking(false); + SelectionKey key = channel.register(selector, Selectionkey.OP_READ); + ``` + - SelectionKey介绍 + + 一个SelectionKey键表示了一个特定的通道对象和一个特定的选择器对象之间的注册关系。 + - 从Selector中选择channel(Selecting Channels via a Selector) + + 选择器维护注册过的通道的集合,并且这种注册关系都被封装在SelectionKey当中. + - 停止选择的方法 + + wakeup()方法 和close()方法。 +3. **模板代码** + + 有了模板代码我们在编写程序时,大多数时间都是在模板代码中添加相应的业务代码。 +4. **客户端与服务端简单交互实例** From 972e88d2d9250ca0176502f863ee7e237738b259 Mon Sep 17 00:00:00 2001 From: Snailclimb Date: Wed, 16 May 2018 15:44:57 +0800 Subject: [PATCH 07/10] =?UTF-8?q?Update=20and=20rename=20Java=20NIO.md=20t?= =?UTF-8?q?o=20Java=20IO=E4=B8=8ENIO.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Java/{Java NIO.md => Java IO与NIO.md} | 38 +++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) rename Java/{Java NIO.md => Java IO与NIO.md} (74%) diff --git a/Java/Java NIO.md b/Java/Java IO与NIO.md similarity index 74% rename from Java/Java NIO.md rename to Java/Java IO与NIO.md index 1025ea88..ac08019f 100644 --- a/Java/Java NIO.md +++ b/Java/Java IO与NIO.md @@ -1,4 +1,36 @@ -由于内容比较多,我下面放的是我更新在我的微信公众号上的链接,微信排版比较好看,更加利于阅读。每一篇文章下面我都把文章的主要内容给列出来了,便于大家学习与回顾。 +由于内容比较多,我下面放的一部分是我更新在我的微信公众号上的链接,微信排版比较好看,更加利于阅读。每一篇文章下面我都把文章的主要内容给列出来了,便于大家学习与回顾。 + +# IO流学习总结 + +### [一 Java IO,硬骨头也能变软](https://zhuanlan.zhihu.com/p/28286559) + +### 主要内容: +**(1) 按操作方式分类结构图:** + +![按操作方式分类结构图:](https://user-gold-cdn.xitu.io/2018/5/16/16367d4fd1ce1b46?w=720&h=1080&f=jpeg&s=69522) + + +**(2)按操作对象分类结构图** + +![按操作对象分类结构图](https://user-gold-cdn.xitu.io/2018/5/16/16367d673b0e268d?w=720&h=535&f=jpeg&s=46081) + +### [二 java IO体系的学习总结](https://blog.csdn.net/nightcurtis/article/details/51324105) +1. **IO流的分类:** + - 按照流的流向分,可以分为输入流和输出流; + - 按照操作单元划分,可以划分为字节流和字符流; + - 按照流的角色划分为节点流和处理流。 +2. **流的原理浅析:** + + java Io流共涉及40多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java Io流的40多个类都是从如下4个抽象类基类中派生出来的。 + + - **InputStream/Reader**: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。 + - **OutputStream/Writer**: 所有输出流的基类,前者是字节输出流,后者是字符输出流。 +3. **常用的io流的用法** + +### [三 Java IO面试题](http://www.imooc.com/article/details/id/24305) + +# NIO学习总结 + ### [一 Java NIO 概览](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483956&idx=1&sn=57692bc5b7c2c6dfb812489baadc29c9&chksm=fd985455caefdd4331d828d8e89b22f19b304aa87d6da73c5d8c66fcef16e4c0b448b1a6f791#rd) @@ -58,6 +90,8 @@ ### [三 Java NIO 之 Channel(通道)](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483966&idx=1&sn=d5cf18c69f5f9ec2aff149270422731f&chksm=fd98545fcaefdd49296e2c78000ce5da277435b90ba3c03b92b7cf54c6ccc71d61d13efbce63#rd) +### 主要内容: + 1. **Channel(通道)介绍** - 通常来说NIO中的所有IO都是从 Channel(通道) 开始的。 - NIO Channel通道和流的区别: @@ -74,6 +108,8 @@ ### [四 Java NIO之Selector(选择器)](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247483966&idx=1&sn=d5cf18c69f5f9ec2aff149270422731f&chksm=fd98545fcaefdd49296e2c78000ce5da277435b90ba3c03b92b7cf54c6ccc71d61d13efbce63#rd) +### 主要内容: + 1. **Selector(选择器)介绍** - Selector 一般称 为选择器 ,当然你也可以翻译为 多路复用器 。它是Java NIO核心组件中的一个,用于检查一个或多个NIO Channel(通道)的状态是否处于可读、可写。如此可以实现单线程管理多个channels,也就是可以管理多个网络链接。 - 使用Selector的好处在于: 使用更少的线程来就可以来处理通道了, 相比使用多个线程,避免了线程上下文切换带来的开销。 From d79361a9feed8a61c9519f838b59777d185ceb83 Mon Sep 17 00:00:00 2001 From: Snailclimb Date: Wed, 16 May 2018 19:38:47 +0800 Subject: [PATCH 08/10] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 24b420ed..f5ac02a3 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ [多线程系列学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java/%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%B3%BB%E5%88%97.md) - ### Java NIO - [Java NIO系列学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java/Java%20NIO.md) + [Java NIO系列学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java/Java%20IO%E4%B8%8ENIO.md) - ### Java虚拟机(jvm) [Java虚拟机(jvm)知识学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java/Java%E8%99%9A%E6%8B%9F%E6%9C%BA%EF%BC%88jvm%EF%BC%89.md) From 77f9fd2070cf408a552a5c0a68752d42839fcbf6 Mon Sep 17 00:00:00 2001 From: Snailclimb Date: Fri, 18 May 2018 12:37:19 +0800 Subject: [PATCH 09/10] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index f5ac02a3..5787c03f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ 在我们学习Java的时候,很多人会面临我不知道继续学什么或者面试会问什么的尴尬情况(我本人之前就很迷茫)。所以,我决定通过这个开源平台来帮助一些有需要的人,通过下面的内容,你会掌握系统的Java学习以及面试的相关知识。本来是想通过Gitbook的形式来制作的,后来想了想觉得可能有点大题小做。另外,我自己一个人的力量毕竟有限,希望各位有想法的朋友可以提issue。 +最近更新日期:2018/5/16 +下一步更新内容给:设计模式 # Java - ### Java基础 [Java基础知识学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java/Java%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.md) From dd7361a05be2adae9681080398975190a4d86404 Mon Sep 17 00:00:00 2001 From: Snailclimb Date: Fri, 18 May 2018 12:37:45 +0800 Subject: [PATCH 10/10] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5787c03f..3cd63873 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ 在我们学习Java的时候,很多人会面临我不知道继续学什么或者面试会问什么的尴尬情况(我本人之前就很迷茫)。所以,我决定通过这个开源平台来帮助一些有需要的人,通过下面的内容,你会掌握系统的Java学习以及面试的相关知识。本来是想通过Gitbook的形式来制作的,后来想了想觉得可能有点大题小做。另外,我自己一个人的力量毕竟有限,希望各位有想法的朋友可以提issue。 -最近更新日期:2018/5/16 -下一步更新内容给:设计模式 +### 最近更新日期:2018/5/16 + +### 下一步更新内容给:设计模式 + # Java - ### Java基础 [Java基础知识学习与面试](https://github.com/Snailclimb/Java_Guide/blob/master/Java/Java%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.md)