首页 > 编程语言 >Java NIO SocketChannel

Java NIO SocketChannel

时间:2024-07-14 11:54:49浏览次数:15  
标签:Java NIO bb 写入 write 接字 SocketChannel

Java NIO SocketChannel用于将通道与TCP(传输控制协议)网络套接字连接。它相当于网络编程中使用的Java网络套接字(Socket)。

Java NIO中有两种可用于创建SocketChannel的方法:

  • 当传入连接到达ServerSocketChannel时,可以创建它。
  • 打开一个SocketChannel,并在网络上与服务器连接。

我们来看看使用选择器的SocketChannel客户端 - 服务器通信的框图:

打开套接字通道 - SocketChannel

可以通过调用SocketChannel.Open()方法打开一个SocketChannel

打开套接字通道(SocketChannel)的语法是:

SocketChannel sc = SocketChannel.open();  
sc.connect(new InetSocketAddress("localhost", 9099));

Java

关闭套接字通道 - SocketChannel

通过调用SocketChannel.close()方法执行所有操作后,可以关闭SocketChannel

关闭套接字通道(SocketChannel)的语法是:

SocketChannel.close();

Java

从SocketChannel读取

要从SocketChannel读取数据,调用read()方法之一。

下面来看如何从SocketChannel读取数据的例子:

ByteBuffer bb = ByteBuffer.allocate(84);  
int bytesRead = SocketChannel.read(bb);

Java

首先分配缓冲区。 从SocketChannel读取的数据存储在缓冲区中。

其次,调用SocketChannel.read()方法,并将数据从SocketChannel读入缓冲区。 read()方法返回写入缓冲区字节数的整数值。

写入套接字通道-SocketChannel

要将数据写入SocketChannel,可使用SocketChannel.write()方法并将缓冲(buffer)作为参数。

下面来看看一下将数据写入SocketChannel的例子:

String newData = "The new String is writing in a file ..." + System.currentTimeMillis();  
ByteBuffer bb= ByteBuffer.allocate(48);  
bb.clear();  
bb.put(newData.getBytes());  
bb.flip();  
while(bb.hasRemaining()) {  
    SocketChannel.write(bb);  
}

Java

SocketChannel.write()方法在while循环中使用,因为write()方法写入SocketChannel的字节数目是未知的,因此需要重复使用write()方法,直到Buffer没有可用的字节写入。

标签:Java,NIO,bb,写入,write,接字,SocketChannel
From: https://blog.csdn.net/unbelievevc/article/details/140258165

相关文章

  • Java NIO管道
    JavaNIO管道用于在两个线程之间建立单向数据连接。它有一个槽通道和源通道。数据正在写入槽通道,然后可以从源通道读取该数据。在JavaNIO中,包java.nio.channel.pipe用于按顺序读取和写入数据。管道用于确保数据必须以写入管道的相同顺序读取。下面来看看管道工作原理的示意......
  • 【java深入学习第5章】Spring Boot 中统一功能的实现与处理
    SpringBoot统一功能处理在开发Web应用程序时,为了提高代码的可维护性和可扩展性,我们通常会采用一些统一的功能处理方式。本文将介绍如何在SpringBoot中实现统一的数据返回格式、异常处理和功能处理,并通过一个图书管理系统的案例来演示这些功能的实现。一、统一数据返回格......
  • 【java深入学习第6章】Spring事件监听机制详解
    在Spring框架中,事件监听机制是一个强大且灵活的功能,允许我们在应用程序中发布和监听事件。这种机制可以帮助我们实现松耦合的设计,使得不同模块之间的通信更加灵活和可维护。本文将详细介绍Spring的事件监听机制,并通过代码示例展示如何使用这一功能。1.什么是Spring事件监听机制?......
  • java InputStream read使用及读取数据注意
    publicabstractintread()throwsIOException;从输入流中读取下一个字节的数据。值字节以int的形式返回,范围在0-255之间。如果由于到达流的末尾而没有字节可用,则返回值-1。此方法会一直阻塞,直到输入数据可用、检测到流结束或抛出异常为止。 publicintread(byteb[],i......
  • 面试篇-Java-1+锁+AQS+死锁
    文章目录前言一、并发编程中你都用过哪些锁1.1Synchronized【对象锁】1.1.1Synchronized的使用1.1.2你知道Synchronized的原理吗1.1.2.1你知道monitor的结构1.1.3Synchronized的实现原理1.1.3你知道Synchronized锁的升级吗1.1.3.1你知道对象头的内存结构和对......
  • 【java深入学习第4章】精通 Java 微服务:Spring Boot 与 Spring Cloud 的核心技术与设
    在现代软件开发中,微服务架构因其灵活性和可扩展性而备受青睐。本文将探讨Java微服务架构中的关键技术和设计原则,并通过SpringBoot和SpringCloud提供代码示例,展示如何构建一个简单的微服务应用。关键技术和设计原则服务拆分:将单体应用拆分为多个独立的微服务,每个服务负责特定......
  • 【java深入学习第2章】Spring Boot 结合 Screw:高效生成数据库设计文档之道
    在开发过程中,数据库设计文档是非常重要的,它可以帮助开发者理解数据库结构,方便后续的维护和扩展。手动编写数据库设计文档不仅耗时,而且容易出错。幸运的是,可以使用SpringBoot和Screw来自动生成数据库设计文档。什么是Screw?Screw是一个开源的数据库文档生成工具,它可以根据数据库......
  • 【java深入学习第3章】通过 Spring AOP 完成参数的加解密
    在现代应用中,数据的安全性越来越受到重视。为了保护敏感数据,我们常常需要对数据进行加密和解密。在这篇博客中,我将展示如何使用SpringAOP(面向切面编程)来实现对方法参数的加解密。什么是SpringAOP?SpringAOP是Spring框架中的一个模块,它提供了面向切面编程的功能。AOP允许我们将......
  • Java进阶之路66问 | 对接口签名是怎么理解的?如何防止接口重放攻击?
    接口签名为什么需要接口签名?现在越来越多的公司以API的形式对外提供服务,这些API接口大多暴露在公网上,所以安全性就变的很重要了。最直接的风险如下:非法使用API服务。(收费接口非法调用)恶意攻击和破坏。(数据篡改、DOS)因此需要设计一些接口安全保护的方式来增强接口......
  • Java进阶之路66问 | 什么是幂等性?如何保证接口的冥等性?
    API设计中的幂等性什么是幂等性幂等性是指无论一个操作执行多少次,最终的结果都是一样的。也就是说,重复执行同一个操作不会改变系统的状态或产生不同的结果。想象你在一栋大楼里等电梯。你按下电梯按钮的5楼按钮键,电梯开始向5楼的位置移动。后面即使你再按几次5楼按钮键,......