Java NIO Selector 多路复用选择器

引言上篇文章我们简单的使用了NIO的Channel通道,本期我们主要来介绍一下选择器(Selector)的使用,Selector是Java NIO核心组件中的一个。在之前介绍5种I/O模型的时候,有介绍过多路复用模型。多路复用模型使得我们可以使用一个线程来管理成千上万的连接,避免了线程上下文切换带来的开销,使得性能得到极大的提升 基本模型选择器Selector使用的基本模式,跟传统BIO处理模型不一样。传统BIO往往我们会使用多线程来提升处理性能,也就是说每接入一个Client,Serve...

阅读全文

无参read返回int类型为何要与上0xff

引言使用java io 包时,InputStream 类中的有好几个read()方法,并且返回值也都是int类型,这样就使得初学者很容易搞混,其实虽然返回值都是int类型,但所表示的意义确是不一样的 有参 read(byte b[], int off, int len)先看有参的read方法。有参的read比较好理解,将读取到的数据写入字节数组(从字节数组的指定位置开始写入) 三个入参 b[] 存储读取到的数据的字节数组 off 从目标数组b[]的off位开始写入,一般都是从0开始 ...

阅读全文

Java NIO Channel 通道

引言上一篇文章主要介绍了Java NIO Buffer的使用及内部实现原理,本期我们将会认识到Java NIO 另一个非常重要的特性Channel(通道) 对比传统IO流在认识Java NIO Channel通道之前,我们有必要对比一下NIO Channel与传统I/O流的区别,以及它的优势在哪里: 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。 通道可以异步地读写。(不会阻塞进程) 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入(面向...

阅读全文

Java中的乱码问题

引言在写Java代码的时候,大家应该都遇到过各种乱码问题,然后开始查资料,结果原因无非是编码格式不一致所导致的乱码,解决方式也是千篇一律,统一使用UTF-8就OK了。 是的这么做乱码问题肯定可以解决,可我们似乎还不太清除是哪一步编码转化除了问题呢? 阅读本篇文章前建议先阅读 浅析计算机字符集和编码,能够对编码有一个大概的了解 Java如何处理编码问题我们知道Java是使用了Unicode字符集,并且字符在内存中是以UTF-16编码格式来存储的,什么意思呢,就是纵然外部有各种Unicode编...

阅读全文

Java NIO Buffer 分析

引言JDK 1.4 之后引入了NIO(New IO或 Non Blocking IO),我觉的可以称其为New IO,因为NIO基本重写所有标准IO的API,完全可以替代标准的Java IO API。并且NIO支持面向缓冲区(Buffer)的、基于通道(Channel)的IO操作,可以以更加高效的方式进行文件的读写操作。 NIO的核心主要包括3部分 Buffer 缓冲区 Channel 通道 文件通道 Socket通道 Selector 选择器 本篇文章会对NIOBuffer缓冲区...

阅读全文

I/O模型简介

引言在深入学习netty之前,还是有必要先回顾下I/O模型,I/O模型理解起来会比较抽象,第一次理解需要借助图片以及实际例子去让自己加深印象 模型分类在开始介绍之前,我们先列举一下Unix下可用的5种I/O模型 阻塞式I/O 非阻塞式I/O I/O复用 信号驱动I/O 异步I/O 接下来的模型介绍都是以UDP做为例子,原因是UDP是以数据报的方式进行数据传输,概念比较简单(整个数据要么收到要么没有收到),便于我们去理解I/O模型的核心概念 阻塞式I/O 我们最熟悉的I/O模型就是阻塞式...

阅读全文

Spring IOC 源码解析 (循环依赖的解决)

引言之前的几篇对Spring IOC源码分析的文章,大体上把IOC容器内部实现做了分析,但在有些细节上并没有很深入的去分析。本篇文章主要是分析Spring IOC容器对Bean之间的循环依赖是如何解决的 什么是循环依赖那么什么是循环依赖呢?简单的理解一下,A依赖B,B又依赖A,这就构成了一个最简单的循环依赖,为了帮助大家理解,新建两个互相依赖的类(儿子和爸爸互相依赖没有错吧 ..) 123456789public class Father { private String ...

阅读全文

Java线程池分析

引言在并发编程中,我们经常会使用到线程池,当然我们也可以手动一个一个创建线程,那么为何我们还是推崇大家使用线程池进行并发编程呢?借用《Java并发编程的艺术》提到的来说一下使用线程池的优点有3个 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。 Thread...

阅读全文

Spring AOP 源码解析三(代理对象的创建)

引言上期我们对AOP核心概念及接口做了粗浅的分析,这期我们主要来探讨一下代理对象的创建过程。在开始之前,先问自己几个问题 Spring是如何帮我们去选择合适的Advice的?找到了又是通过何种方式创建代理对象的? 好了,现在我们开始分析代理对象的创建过程,首先,先来看一下AspectJAwareAdvisorAutoProxyCreator.class类的继承体系 可以看到AspectJAwareAdvisorAutoProxyCreator.class主要实现了这几个接口 Awa...

阅读全文

Spring AOP 源码解析二 (AOP核心概念及接口分析)

引言上期对Spring AOP的配置入口做了一个很简单的源码解读,相当于一道开胃菜,有些概念也并没有细说。这期我们主要来理一下AOP的整体概念,以及相关的接口分析 AOP概念面向切面编程AOP其实是对OOP编程方式的一种补充,OOP中模块化的关键单元是类,而在AOP中,模块化单元则是Aspect,我们又把它叫做切面。对于Spring IOC来说,Spring AOP是对IOC的强有力增强。 接下来我们将对AOP的核心接口做详细的分析 AOP核心接口Pointcut 切点切入点,顾名思义,就...

阅读全文


Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2020 王俊男的技术杂谈 All Rights Reserved.

访客数 : | 访问量 :