java基础---NIO续---selecteor

本文介绍了Java NIO中的Selector组件,用于管理多个网络连接,并减少线程开销。同时详细讲解了字符集的编码与解码过程,包括如何使用Charset类进行字符集的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

selector

Java NIO核心组件中的一个,用于检查一个或多个NIO Channel通道的状态是否处于可读、可写。如此可以实现单线程管理多个channels也就是可以管理多个网络链接。
使用Selector的好处在于: 使用更少的线程来就可以来处理通道了, 相比使用多个线程,避免了线程上下文切换带来的开销
  • FileChannel不能切换为非阻塞模式,更准确的来说是因为FileChannel没有继承 SelectableChannel
  • 多用于网络应用编程中

基本用法

  1. Selector的创建。通过调用Selector.open()方法创建一个Selector对象                Selector selector = Selector.open();
  2. 注册Channel到Selector
    channel.configureBlocking(false);
    SelectionKey key = channel.register(selector, Selectionkey.OP_READ);
  3. 轮询方式获取选择器上的状态值
    while(selector.select()>0){
    Iterator<SelectionKey> it=selector.selectedKeys().iterator();
    ...
    }

ChatSet字符集

所有文件在底层都是二进制文件,字符文件是系统将底层的二进制序列转换为字符,这里会涉及编码Encoder和解码Decoder
  • 将明文的字符序列转换为计算机理解的二进制序列称为编码
  • 将二进制序列转换为明文字符串称为解码

Charset类

  • availableCharsets()SortedMap<String,Charset> 获取当前JDK所支持的所有字符集
    • 字符串别名
      • UTF-88UCS转换格式                                                                     
      • ISO-8859-1拉丁文
      • GBK简体中文                                                                                           Charset c=Charset.forName("GBK");
         Java7新增StandardCharsets类,其中包含了ISO_8859_1UTF_8、UTF-16等类变量,这些类变量代表了最常见的字符集对应的Charset对象
  • newDecoder():CharsetDecoder获取该编码字符集对应的解码器
    • decode(ByteBuffer):CharBuffer方法可以将字节序列ByteBuffer转换为CharBuffer字符序列
  • newEncoder():CharsetEncoder获取该编码字符集对应的编码器
    • encode(CharBuffer):ByteBuffer方法可以将字符序列CharBuffer转换为ByteBuffer字节序列
Charset c1 = Charset.forName("GBK");
CharsetEncoder encoder = c1.newEncoder();
CharsetDecoder decoder = c1.newDecoder();
CharBuffer cb = CharBuffer.allocate(8);
cb.put('');
cb.put('');
cb.put('');
cb.flip();
ByteBuffer bb=encoder.encode(cb);//CharBuffer转换为ByteBuffer
for(int i=0;i<6;i++) {
        System.out.println(bb.get(i)+" ");
}
System.out.println("====================");
System.out.println(decoder.decode(bb));//byteBuffer转换为charBuffer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值