当前位置: 首页 > wzjs >正文

温州建设局网站首页竞价推广哪家公司好

温州建设局网站首页,竞价推广哪家公司好,中企动力科技股份有限公司销售,重庆市建设工程信息网安📌 引言 在前面的文章中,我们介绍了序列化和反序列化(Java进阶篇之序列化和反序列化)在 Java 的 I/O 体系中,java.io提供了传统的BIO(Blocking I/O,阻塞 I/O),它适用于小…

📌 引言

在前面的文章中,我们介绍了序列化和反序列化(Java进阶篇之序列化和反序列化)在 Java 的 I/O 体系中,java.io提供了传统的BIO(Blocking I/O,阻塞 I/O),它适用于小规模的数据交互。但在高并发、大数据量传输的场景下,java.nio(New I/O,非阻塞 I/O)提供了更高效的解决方案。NIO 采用**缓冲区(Buffer)+ 通道(Channel)**的方式,提高了数据处理能力,并支持 多路复用(Selector),大大提升了 I/O 性能。

本篇文章将详细介绍 Java NIO 的基础概念、核心组件、使用示例,并对比传统 IO,帮助你更好地理解 NIO 的工作原理。


目录

📌 引言

🏗 一、NIO 概述

1️⃣ 传统 I/O(BIO)的缺点

2️⃣ NIO 的优势

🛠 二、NIO 的核心组件

1️⃣ Buffer(缓冲区)

2️⃣ Channel(通道)

3️⃣ Selector(多路复用器)

🔄 四、NIO vs 传统IO

🎯 结语


🏗 一、NIO 概述

1️⃣ 传统 I/O(BIO)的缺点

  • 阻塞模式:BIO 采用 流式处理,读取或写入数据时必须等待操作完成,线程可能被阻塞。
  • 线程消耗大:每个连接通常对应一个独立的线程,在高并发场景下,线程资源消耗过多,导致性能下降。
  • 数据复制:BIO 需要频繁在用户空间和内核空间之间拷贝数据,影响 I/O 性能。

2️⃣ NIO 的优势

  • 非阻塞 I/O:NIO 允许一个线程管理多个连接,无需为每个连接创建线程。
  • 基于 Buffer(缓冲区):相比于传统的 Stream(流),NIO 以块(Block)形式处理数据,减少数据拷贝,提高吞吐量。
  • 使用 Channel(通道):双向数据通道,可同时进行读写操作,避免了 BIO 的单向流式传输。
  • 支持 Selector(多路复用器):一个线程可以管理多个通道,提高资源利用率。

🛠 二、NIO 的核心组件

Java NIO 主要由 Buffer(缓冲区)、Channel(通道)、Selector(选择器) 组成:

1️⃣ Buffer(缓冲区)

缓冲区用于存储数据,NIO 不再直接与流交互,而是通过 Buffer 进行数据的读取和写入。常见的 Buffer 类型:

Buffer 类型作用
ByteBuffer处理字节数据
CharBuffer处理字符数据
IntBuffer处理整数数据
FloatBuffer处理浮点数数据
LongBuffer处理长整数数据
DoubleBuffer处理双精度浮点数数据

Buffer 关键方法:

  • allocate(int capacity):创建指定容量的 Buffer。
  • put(data):向 Buffer 写入数据。
  • flip():切换为读模式。
  • get():从 Buffer 读取数据。
  • clear():清空 Buffer,准备下一次写入。

示例:使用 ByteBuffer 存储数据

import java.nio.ByteBuffer;public class BufferExample {public static void main(String[] args) {ByteBuffer buffer = ByteBuffer.allocate(10); // 创建容量为 10 的缓冲区// 写入数据buffer.put((byte) 1);buffer.put((byte) 2);buffer.put((byte) 3);buffer.flip(); // 切换到读模式while (buffer.hasRemaining()) {System.out.println(buffer.get()); // 读取数据}}
}

2️⃣ Channel(通道)

通道类似于传统的流(Stream),但它支持双向数据传输(既可读,也可写)。

常见的 Channel 实现:

  • FileChannel:用于文件读写。
  • SocketChannel:用于网络通信(类似 Socket)。
  • ServerSocketChannel:用于服务器端的 Socket 监听。
  • DatagramChannel:用于 UDP 连接。

示例:使用 FileChannel 读取文件

import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;public class FileChannelExample {public static void main(String[] args) throws Exception {FileInputStream fis = new FileInputStream("test.txt");FileChannel channel = fis.getChannel();ByteBuffer buffer = ByteBuffer.allocate(1024);channel.read(buffer);buffer.flip(); // 切换到读模式while (buffer.hasRemaining()) {System.out.print((char) buffer.get());}channel.close();fis.close();}
}

3️⃣ Selector(多路复用器)

Selector 允许 单个线程管理多个通道,提高了 I/O 处理效率,特别适用于高并发场景,如 Web 服务器、聊天室等。

Selector 关键方法

  • select():阻塞直到至少一个通道准备就绪。
  • selectNow():非阻塞检查就绪通道。
  • register():将 Channel 注册到 Selector 上。

示例:使用 Selector 监听多个 Channel

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.*;
import java.net.InetSocketAddress;
import java.util.Iterator;public class SelectorExample {public static void main(String[] args) throws IOException {Selector selector = Selector.open();ServerSocketChannel serverChannel = ServerSocketChannel.open();serverChannel.bind(new InetSocketAddress(8080));serverChannel.configureBlocking(false);serverChannel.register(selector, SelectionKey.OP_ACCEPT);while (true) {selector.select(); // 阻塞等待事件Iterator<SelectionKey> iterator = selector.selectedKeys().iterator();while (iterator.hasNext()) {SelectionKey key = iterator.next();iterator.remove();if (key.isAcceptable()) { // 处理新连接SocketChannel client = serverChannel.accept();client.configureBlocking(false);client.register(selector, SelectionKey.OP_READ);System.out.println("Client connected: " + client.getRemoteAddress());} else if (key.isReadable()) { // 读取数据SocketChannel client = (SocketChannel) key.channel();ByteBuffer buffer = ByteBuffer.allocate(1024);int bytesRead = client.read(buffer);if (bytesRead > 0) {buffer.flip();System.out.println("Received: " + new String(buffer.array(), 0, bytesRead));}}}}}
}

🔄 四、NIO vs 传统IO

对比项传统 I/O (BIO)NIO (非阻塞 I/O)
数据处理基于流基于缓冲区(Buffer)
阻塞模式阻塞(每次读写都等待完成)非阻塞(一个线程可管理多个连接)
适用场景小数据量、单连接高并发、大量连接
线程模型每连接一个线程单线程管理多个连接

🎯 结语

Java NIO 是高性能 I/O 编程的基础,适用于高并发、低延迟的应用场景。本文介绍了 NIO 的基本概念、核心组件(Buffer、Channel、Selector)及代码示例,希望能帮助你更好地理解 NIO 的应用。

下一步,你可以尝试使用NIO实现简单的 Web 服务器或聊天室,进一步加深对非阻塞 I/O 的理解!💡

在接下来的文章中,我们将继续探讨Java中的多线程以及其他重要特性,敬请期待!

👉 如果你觉得这篇文章对你有所帮助,欢迎点赞、收藏、分享!😊

http://www.dtcms.com/wzjs/43517.html

相关文章:

  • 培训网站模板百度广告联盟app下载官网
  • 网站是哪个公司做的百度权重查询
  • 徐州网站建设培训班关键词com
  • 张家界住房和城乡建设局网站专业网页设计和网站制作公司
  • cpa单页网站怎么做杭州seo软件
  • 有哪些可以做1元夺宝的网站湖北网站设计
  • 同步网站内容怎么做seo快速排名优化方法
  • 网站服务内容怎么写中国网站排名查询
  • 闸北做网站公司网络营销的成功案例有哪些
  • 纯html静态网站竞价托管收费标准
  • 在日常网站建设中宣传积极网站制作出名的公司
  • 钢板防护罩做网站深圳做网站的公司
  • 制作收款网站微信推广引流加精准客户
  • 快速网站推广工具长沙关键词优化新报价
  • 自己做短视频网站找谁做百度关键词排名
  • 做游戏的av迅雷下载网站百度搜索排名优化
  • 广东电子商务网站建设价格seo什么职位
  • 网站建设几个税点教育机构在线咨询
  • 网站建设最流行语言百度定位店铺位置怎么设置
  • 做名片哪个网站最好搜索引擎优化seo专员
  • 国外做鞋子的网站吗seo点击排名源码
  • 象山县住房和城乡建设局网站草根seo博客
  • asp商城网站源码下载站长seo综合查询
  • 手游代理联运平台成都关键词seo推广平台
  • 深圳免费网站优化网络推广网络优化工程师证书
  • 做图兼职网站有哪些长沙建站工作室
  • 江苏省建设工程招投标网站产品营销策划方案
  • 网站服务提供商网站排名优化外包
  • 如何在人力资源网站做合同续签搜索引擎优化seo网站
  • 做网站需要了解的内容今日桂林头条新闻