刚开始学习java nio开发,写了个简单的例子,使用NIO 实现阻塞的发送接收数据,但是发现客户端一直没有接受到数据:
@Test public void Server() throws IOException{ ServerSocketChannel sChannel = ServerSocketChannel.open(); sChannel.bind(new InetSocketAddress(9010)); ByteBuffer byteBuffer = ByteBuffer.allocate(1024); String msg = "abcdef21a下小"; System.out.println(msg.getBytes().length); byteBuffer.put(msg.getBytes()); System.out.println("存数据:capacity:"+byteBuffer.capacity()); System.out.println("存数据:limit:"+byteBuffer.limit()); System.out.println("存数据:position:"+byteBuffer.position()); System.out.println("服务端已启动,等待客户端连接"); SocketChannel channel = sChannel.accept(); System.out.println("客户端已连接,开始发送数据"); byteBuffer.flip(); channel.write(byteBuffer); channel.close(); sChannel.close(); }
@Test public void client() throws IOException{ SocketChannel channel = SocketChannel.open(); channel.connect(new InetSocketAddress("localhost", 9010)); ByteBuffer byteBuffer = ByteBuffer.allocate(1024); System.out.println("客户端启动,连接上服务端,准备接受数据"); int p =0; while((p=channel.read(byteBuffer))!=-1){ System.out.println("读了几个:"+p); System.out.println("读后:capacity:"+byteBuffer.capacity()); System.out.println("读后:limit:"+byteBuffer.limit()); System.out.println("读后:position:"+byteBuffer.position()); System.out.println("读后:remaining:"+byteBuffer.remaining()); byteBuffer.flip(); byte[] bts = new byte[byteBuffer.remaining()]; byteBuffer.get(bts); System.out.println("客户端接收到数据:"+new String(bts)); byteBuffer.clear(); } channel.close(); } 只是简单的学习,代码比较简单,当在服务端和客户端加了对应的byteBuffer.filp()之后,才能实 现服务端发送与客户端接收,其中原理,这个例子主要是立即ByteBuffer的3个重要的标识,limit、 capacity、position (限制大小,容量,当前位置),新建ByteBuffer时 limit与capacity一样, positon=0,当使用put放入数据时
相关推荐
这些示例通常会包含简单的读写文件、服务器端与客户端的通信以及多路复用的使用,帮助初学者快速理解NIO的工作原理和实际应用。在学习过程中,你可以逐步深入,从基础的Buffer操作到复杂的Selector机制,掌握Java ...
Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的BIO( Blocking I/O)相比,NIO...对于初学者来说,这些源码实例可以帮助理解Java NIO的基本用法和优势,进一步提升在实际项目中的应用能力。
Java NIO(Non-blocking Input/Output)是Java SE 1.4引入的一种新的I/O模型,它是对传统I/O模型的补充。NIO的核心概念包括通道(Channels)、缓冲区(Buffers)以及选择器(Selectors)。这个开发文档对于初学者来...
然而,NIO也存在一定的学习曲线,例如编程模型相对复杂,对于初学者可能不太友好。在使用NIO时,需要理解和掌握缓冲区、通道、选择器的工作原理,以及如何有效地组织代码来利用这些特性。 《Java NIO》这本书详细...
### Java NIO (New Input/Output) 概述与核心概念 #### 一、Java NIO 的引入背景 Java NIO(New Input/Output),即新的输入/输出库...无论是初学者还是有经验的开发者,都应该投入时间去掌握 Java NIO 的相关知识。
Java NIO(New IO)是Java 1.4版本引入的一个新特性,是对传统IO模型的补充和扩展。在传统的Java IO中,我们通常使用InputStream和OutputStream等...对于学习Java NIO和游戏开发的初学者来说,这是一个很好的实践项目。
对于Java初学者来说,选择合适的书籍进行学习是至关重要的一步。好的书籍不仅能够帮助我们打下坚实的基础,还能让我们在编程的道路上少走弯路。根据提供的信息,我们可以推测这三本书分别是Java初学者应该阅读的经典...
Java NIO(New Input/...通过本教程,初学者可以逐步理解Java NIO的原理,掌握通道、缓冲区和选择器的使用,为实际项目开发打下坚实基础。通过实践,可以更好地理解NIO在处理大量并发连接和高效数据传输方面的优势。
6. **IO与NIO**:Java的输入/输出系统(IO)和新IO(NIO)是处理数据输入输出的重要部分。理解流的概念,学会使用File类,以及缓冲区操作,对于处理文件和网络通信至关重要。 7. **多线程**:Java内置了对多线程的...
对于初学者,这个项目可以帮助理解如何使用Java NIO来构建网络服务器,以及如何设计和实现一个简单的HTTP协议处理器。 【标签】"Java"明确了这个项目是用Java语言编写的,Java作为一门广泛应用的编程语言,其丰富的...
《IBM Java文档库 NIO 入门》这篇教程主要针对的是Java 1.4引入的New Input/Output (NIO)库,这是一个重要的更新,旨在提高Java程序的I/O性能,特别是面向块的I/O操作。NIO弥补了传统I/O(基于java.io.*包)的不足,...
对于初学者,理解和掌握这些基础知识是构建Java程序的基石。 2. **Linux命令行**:Linux命令行是Linux操作系统的主要交互方式之一,通过命令行,用户可以执行各种任务,如文件管理(创建、删除、移动和重命名文件)...
13. **IO与NIO**:Java标准IO和NIO(New Input/Output)的区别和使用场景。 14. **网络编程**:Socket编程,实现客户端和服务端的通信。 15. **泛型**:理解泛型的概念,使用泛型类和泛型方法提高代码的复用性和...
本"java课件初学版"针对初学者,旨在帮助他们掌握面向对象的程序设计基础,从而踏入Java的世界。 Java的核心特性之一是它的面向对象特性。面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它将...