`
清风送月
  • 浏览: 3374 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java NIO 初学

阅读更多

刚开始学习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放入数据时
 

 

 

分享到:
评论

相关推荐

    java nio示例代码

    这些示例通常会包含简单的读写文件、服务器端与客户端的通信以及多路复用的使用,帮助初学者快速理解NIO的工作原理和实际应用。在学习过程中,你可以逐步深入,从基础的Buffer操作到复杂的Selector机制,掌握Java ...

    nio.rar_FastCopyFile.java_NIO_UseFloatBuffer.java_java nio_文件锁

    Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的BIO( Blocking I/O)相比,NIO...对于初学者来说,这些源码实例可以帮助理解Java NIO的基本用法和优势,进一步提升在实际项目中的应用能力。

    java NIO 中文开发文档

    Java NIO(Non-blocking Input/Output)是Java SE 1.4引入的一种新的I/O模型,它是对传统I/O模型的补充。NIO的核心概念包括通道(Channels)、缓冲区(Buffers)以及选择器(Selectors)。这个开发文档对于初学者来...

    《Java NIO》Download Url

    然而,NIO也存在一定的学习曲线,例如编程模型相对复杂,对于初学者可能不太友好。在使用NIO时,需要理解和掌握缓冲区、通道、选择器的工作原理,以及如何有效地组织代码来利用这些特性。 《Java NIO》这本书详细...

    Java NIO pdf

    ### Java NIO (New Input/Output) 概述与核心概念 #### 一、Java NIO 的引入背景 Java NIO(New Input/Output),即新的输入/输出库...无论是初学者还是有经验的开发者,都应该投入时间去掌握 Java NIO 的相关知识。

    基于Java NIO实现五子棋游戏.zip

    Java NIO(New IO)是Java 1.4版本引入的一个新特性,是对传统IO模型的补充和扩展。在传统的Java IO中,我们通常使用InputStream和OutputStream等...对于学习Java NIO和游戏开发的初学者来说,这是一个很好的实践项目。

    java初学者应该阅读的书籍

    对于Java初学者来说,选择合适的书籍进行学习是至关重要的一步。好的书籍不仅能够帮助我们打下坚实的基础,还能让我们在编程的道路上少走弯路。根据提供的信息,我们可以推测这三本书分别是Java初学者应该阅读的经典...

    java nio教程

    Java NIO(New Input/...通过本教程,初学者可以逐步理解Java NIO的原理,掌握通道、缓冲区和选择器的使用,为实际项目开发打下坚实基础。通过实践,可以更好地理解NIO在处理大量并发连接和高效数据传输方面的优势。

    java精要初学者速学入门

    6. **IO与NIO**:Java的输入/输出系统(IO)和新IO(NIO)是处理数据输入输出的重要部分。理解流的概念,学会使用File类,以及缓冲区操作,对于处理文件和网络通信至关重要。 7. **多线程**:Java内置了对多线程的...

    tiny-web-server:使用 java nio 构建的原型 Web 服务器。 灵感来自 Netty

    对于初学者,这个项目可以帮助理解如何使用Java NIO来构建网络服务器,以及如何设计和实现一个简单的HTTP协议处理器。 【标签】"Java"明确了这个项目是用Java语言编写的,Java作为一门广泛应用的编程语言,其丰富的...

    IBM Java文档库 NIO 入门

    《IBM Java文档库 NIO 入门》这篇教程主要针对的是Java 1.4引入的New Input/Output (NIO)库,这是一个重要的更新,旨在提高Java程序的I/O性能,特别是面向块的I/O操作。NIO弥补了传统I/O(基于java.io.*包)的不足,...

    SimpleJava、Linux命令行、Java NIO (中文版)、Linux Performance and Tuning Guidelines

    对于初学者,理解和掌握这些基础知识是构建Java程序的基石。 2. **Linux命令行**:Linux命令行是Linux操作系统的主要交互方式之一,通过命令行,用户可以执行各种任务,如文件管理(创建、删除、移动和重命名文件)...

    180个针对Java初学者的简单实例

    13. **IO与NIO**:Java标准IO和NIO(New Input/Output)的区别和使用场景。 14. **网络编程**:Socket编程,实现客户端和服务端的通信。 15. **泛型**:理解泛型的概念,使用泛型类和泛型方法提高代码的复用性和...

    java课件初学版

    本"java课件初学版"针对初学者,旨在帮助他们掌握面向对象的程序设计基础,从而踏入Java的世界。 Java的核心特性之一是它的面向对象特性。面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它将...

Global site tag (gtag.js) - Google Analytics