Java NIO学习系列一:Buffer】的更多相关文章

前面三篇文章中分别总结了标准Java IO系统中的File.RandomAccessFile.I/O流系统,对于I/O系统从其继承体系入手,力求对类数量繁多的的I/O系统有一个清晰的认识,然后结合一些I/O的常规用法来加深对标准I/O系统的掌握,感兴趣的同学可以看一下: <<Java I/O系统学习系列一:File和RandomAccessFile>> <<Java I/O系统学习系列二:输入和输出>> <<Java I/O系统学习系列三:I/O…
前面的一些文章中我总结了一些Java IO和NIO相关的主要知识点,也是管中窥豹,IO类库已经功能很强大了,但是Java 为什么又要引入NIO,这是我一直不是很清楚的?前面也只是简单提及了一下:因为性能,但是仅仅是因为性能吗,除此之外是否还有别的原因,或者说既然NIO性能好,那为什么现在我们还在使用IO.本节我们就来详细对比一下两者的特性以及两者之间的不一致对我们编码所带来的影响. 同样,本文会主要围绕下面几个方面来总结: Java NIO和IO的主要区别 NIO和IO的不同对代码设计带来的变化…
前面的两篇文章中总结了Java NIO中的两大基础组件Buffer和Channel的相关知识点,在NIO中都是通过Channel和Buffer的协作来读写数据的,在这个基础上通过selector来协调多个channel以同时读写数据,本文我们就来学习一下selector. Java NIO中引入了"selector"的概念,一个selector其实是一个Java对象,能够通过诸如连接打开.数据就绪等事件监控多个channel.如此在单个线程中就可以通过一个selector同时处理多个c…
相对于标准Java IO中通过File来指向文件和目录,Java NIO中提供了更丰富的类来支持对文件和目录的操作,不仅仅支持更多操作,还支持诸如异步读写等特性,本文我们就来学习一些Java NIO提供的和文件相关的类: Java NIO Path Java NIO Files Java NIO AsynchronousFileChannel 总结 1. Java NIO Path Java Path是一个接口,位于java.nio.file包中,Java 7中引入到Java NIO中.   一…
上文总结了Java NIO中的Buffer相关知识点,本文中我们来总结一下它的好兄弟:Channel.上文有说到,Java NIO中的Buffer一般和Channel配对使用,NIO中的所有IO都起始于一个Channel,一个Channel就相当于一个流,,可以从Channel中读取数据到Buffer,或者写数据到Channel中. Channel简介 FileChannel SocketChannel ServerSocketChannel DatagramChannel 总结 1. Chan…
前文中我们总结了linux系统中的5中IO模型,并且着重介绍了其中的4种IO模型: 阻塞I/O(blocking IO) 非阻塞I/O(nonblocking IO) I/O多路复用(IO multiplexing) 异步I/O(asynchronous IO) 但是前面总结的IO模型只是限定在linux下,更偏向于操作系统底层的概念,并没有涉及到Java应用层面,其实Java中也提供了和前面操作系统层面的IO模型相对应的概念,这是本文接下来要讲的重点. 同样本文会围绕如下几点进行展开: I/O…
前面总结了很多IO.NIO相关的基础知识点,还总结了IO和NIO之间的区别及各自适用场景,本文会从另一个视角来学习一下IO,即IO模型.什么是IO模型?对于不同人.在不同场景下给出的答案是不同的,所以先限定一下本文的上下文:Linux环境下的network IO. 本文会从如下几个方面展开: 一些基础概念 I/O模型 总结 1. 一些基础概念 IO模型这个概念属于比较基础的底层概念,在此之前容我再先简单介绍一些涉及到的更底层的概念,帮助对I/O模型的理解: 1.1 用户空间与内核空间 现在操作系…
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Selector Java NIO 学习笔记(四)----文件通道和网络通道 Java NIO 学习笔记(五)----路径.文件和管道 Path/Files/Pipe Java NIO 学习笔记(六)----异步文件通道 AsynchronousFileChannel Java NIO 学习笔记(七)----N…
Java命令学习系列(二)——Jstack 2015-04-18 分类:Java 阅读(512) 评论(0) jstack是java虚拟机自带的一种堆栈跟踪工具. 功能 jstack用于生成java虚拟机当前时刻的线程快照.线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁.死循环.请求外部资源导致的长时间等待等. 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么…
Reactor两种多线程模型的实现 注:本篇文章例子基于上一篇进行:Java NIO学习与记录(七): Reactor单线程模型的实现 紧接着上篇Reactor单线程模型的例子来,假设Handler的read那里的处理方式延迟5s,当做是业务性能瓶颈,改变下原来的Handler,让其read方法在处理时延迟5s: private void read() throws IOException { if (selectionKey.isValid()) { System.out.println("服…