`
QING____
  • 浏览: 2232885 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
SelectableChannel("可被选择"通道):抽象类,此类实现了InterruptableChannel接口."可选择"通道,就是noblocking通道,它的实现需要Selector的支持.因此这些Channel取名为"SelectableChannel"是可以理解的. 为 了和Selector(选择器)一起使用,此类的实例必须首先通过register方法进行注册.此方法返回一个表示该通道已向选择器注册的新 SelectionKey对象."注销"选择器绑定时,会释放分配给改通道的所有资源.需要通过s ...
  一.Channel相关接口(概述): NIO中核心的API,它被底层操作封装,提供了数据进行NIO操作的"途径",可以配合Selector实现多路IO复用/非阻塞操作.Channel(通道)表示实体(例如硬件设备,文件,网络socket等)的开放链接.Channel与其实体关联,并具有相同的状态,例如关闭或者开启.Channels可以是异步的(noblocking),可中断的(inerruptable). Channel接口是最顶级的接口.其子接口列表如下: ReadableByteChannel:可以将内容读入缓冲区,此接口具有一个read(ByteBuf ...

Socket问题小结

    博客分类:
  • JAVA
1.    Socket(TCP/IP)通讯,需要两端的Socket都持有连接,当Client端去远端connect时(成功之前),首先会bind到本地的一个可用的端口(可以通过socket.bind(InetAddress)来手动指定),可以通过socket.boud()检测是否已经bind成功. 尽管Socket Client端建立连接时bind的端口通常我们不关心,但是这是TCP建立连接的条件.即每个Client建立一次连接,都会导致本地一个端口被"暂时"占用,直到Socket关闭,由此可见Client申请链接的个数也是有极限的.(客户端可以建立的连接数是有限的, ...

NIO-BUFFER详解

一.Buffer类(抽象):     一个用于特定基本数据的容器.buffer即为特定基本类型元素的线性存储容器,底层通过数组结构支撑.buffer具有数据的很多特征,如容量,限制(limit),位置(postion),以及方便操作的"标记"(mark).       容量:c ...

IO与SOCKET IO散记

    博客分类:
  • JAVA
  对于File IO,磁盘驱动器将数据从磁盘中"汲取"到Kernel space(系统内存),此过程将采用DMA(直接内存存取)方式;不消耗CPU周期.对于用户进程,如果想操作数据,需要将kernel space中的数据buffer复制到user space(即进程空间).因为进程不具有特权,无法直接操作kernel space以及磁盘,进程操作需要通过OS内核做调度. 虚拟内存:目前所有的操作系统都使用了"虚拟内存"策略,一个或多个虚拟内存地址可以对应一个物理内存地址,虚拟内存地址大小可以远大于物理内存大小.因为设备驱动器无法通过DMA访问us ...
NIO-Socket通讯,为我们解决了server端多线程设计方面的性能/吞吐量等多方面的问题,它提供了以非阻塞模式 + 线程池的方式来解决Server端高并发问题..NIO并不能显著的提升Client-server的通讯性能(其中包括全局性耗时总和,Server物理机资源开销和实际计算量),但是它可以确保Server端在支撑相应的并发量情况下,对物理资源的使用处于可控状态.对于开发者而言,NIO合理的使用了平台(OS/VM/Http协议)的特性并提供了高效的便捷的编程级别的API.   为了展示,NIO交互的基本特性,我们模拟了一个简单的场景:Client端向server端建立连接,并 ...
开发一段程序来模拟Socket 通讯和数据传输,socket通讯需要注意的几个问题: Socket API的合理使用,以及关于socket option参数的设计和优化 socket交互中,有关阻塞/异常处理问题 socket通讯对于server端而言,多线程或者线程池的合理使用 数据流成帧技术的使用 本段程序,如果在production环境使用,还有很多需要优化和适配的地方,如下仅作实例展示: SocketTestMain.java:引导类 SocketPacket.java:用于封装流数据,适用流数据解析和传输,我们期望以封装性/面向对象的方式解决问题 SoketI ...

JAVA-SOCKET编程

    博客分类:
  • JAVA
  一.InetAddress类 表示为互联网协议地址.InetAddress类具有一个缓存,用于存储成功或者不成功的主机名解析.可以通过系统属性"networkaddress.cache.ttl"(time-to-live)来设定.InetAddress有2个子类:Inet4Address和Inet6Address,大部分时候我们 ...
////////////////////////////Demo package com.test.java; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.InetSocketAddress; public class DatagramTestMain { private static final int port = 30006; /** * @param args */ ...
package com.test.socket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.channels.DatagramChannel; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.charset.C ...
SynchronousQueue:同步Queue,属于线程安全的BlockingQueue的一种,此队列设计的理念类似于"单工模式",对于每个put/offer操作,必须等待一个take/poll操作,类似于我们的现实生活中的"火把传递":一个火把传递地他人,需要2个人"触手可及"才行. 因为这种策略,最终导致队列中并没有一个真正的元素;这是一种pipleline思路的基于queue的"操作传递".  void put(E o):向队列提交一个元素,阻塞直到其他线程take或者poll此元素. boole ...

Deque

    博客分类:
  • JAVA
Deque是双端队列,可以使用FIFO(队列)和FILO(栈),其实现常见的有ArrayDeque,LinkedList、LinkedBlockingDeque(线程安全) 一. ArrayDeque是基于数组实现的,且数组容量是可扩展的(即无容量边界)的双端队列。它不是线程安全的。该类 ...

java.lang-API整理(1)

    博客分类:
  • JAVA
  一.Cloneable接口(浅复制) 此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。此接口只是一个标记,无实际方法。 如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常。 按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的)。请参阅 Object.clone()(一个本地方法),以获得有关重写此方法的详细信息。 注意,此接口不 包含 clone 方法。因此,因为某个 ...

java.lang-API整理(2)

    博客分类:
  • JAVA
  七.ClassLoader(abstract):类加载器 类加载器是负责加载类的对象。ClassLoader 类是一个抽象类。如果给定类的二进制名称,那么类加载器会试图查找或生成构成类定义的数据。 一般策略是将名称转换为某个文件名,然后从文件系 ...

java.lang-API整理(3)

    博客分类:
  • JAVA
十.InheritableThreadLocal类(继承性ThreadLocal) InheritableThreadLocal类继承自ThreadLocal,它具有ThreadLocal的所有特征,同时它还具有能够访问其父线程绑定的数据.但是其父线程不能访问其绑定的数据. 感觉就像父线程set的值被"继承下来"一样,但是子线程只能get父线程绑定的值,不能通过set去重置父线程的值,因为子线程set,将会导致将新值与子线程绑定,而非修改父线程的value. ThreadLocal实例可以与一个"value"绑定,并在当前线程的任何进度中,获取此 ...
Global site tag (gtag.js) - Google Analytics