`
别惹Java
  • 浏览: 45677 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Java网络编程(三) java 流io和块io

 
阅读更多
       在 Java 的早期,JVM 在解释字节码时往往很少或没有运行时优化。这就意味着,Java 程序往往拖得很长,其运行速率大大低于本地编译代码,因而对操作系统I/O 子系统的要求并不太高。 如今在运行时优化方面,JVM 已然前进了一大步。现在 JVM 运行字节码的速率已经接近本地编译代码,借助动态运行时优化,其表现甚至还有所超越。这就意味着,多数 Java 应用程序已不再受 CPU 的束缚(把大量时间用在执行代码上),而更多时候是受 I/O 的束缚(等待数据传输)。

       然而,在大多数情况下,Java 应用程序并非真的受着 I/O 的束缚。操作系统并非不能快速传送数据,让 Java 有事可做;相反,是 JVM 自身在 I/O 方面效率欠佳。操作系统与 Java 基于流的 I/O模型有些不匹配。操作系统要移动的是大块数据(缓冲区),这往往是在硬件直接存储器存取(DMA)的协助下完成的。而 JVM 的 I/O 类喜欢操作小块数据——单个字节、几行文本。结果,操作系统送来整缓冲区的数据,java.io 的流数据类再花大量时间把它们拆成小块,往往拷贝一个小块就要往返于几层对象。操作系统喜欢整卡车地运来数据,java.io 类则喜欢一铲子一铲子地加工数据。有了 NIO,就可以轻松地把一卡车数据备份到您能直接使用的地方(ByteBuffer 对象)。

1)面向流I/O的系统:一次处理一个字节的数据。一个输入流每次会读入一个字节的数据,一个输出流同样每次次消费一个字节的数据。对于流式数据,很容易创建过滤器。可以相对简单地把几个过滤器连接在一起,每个过滤器完成自己的工作,也是按字节进行过滤,精细的处理机制。另一方面,面向流I/-O的通信往往比较缓慢。

2)面向块I/O的系统:以块为单位处理数据。每个操作步骤会生成或消费一个块的数据。以块为单位处理数据,其处理速度远快于以字节流为单位的方式。但是,与面向流I/O的通信相比,面向块I/O的通信缺乏优雅和简洁。

      新的抽象把重点放在了如何缩短抽象与现实之间的距离上面。NIO 抽象与现实中存在的实体有着非常真实直接的交互关系。

关于何时该采用传统io,何时应该采用nio:
1) 扩展性考虑:例如在进行Socket编程通信时每一个Socket都应占据一个线程。使用NIO虽然更富有效率,但相对难以编码和扩展。(当然这一现象在不断的被新的设计和NIO库的特性所改善)
2) 性能考虑:在处理成千上万的连接时,你可能需要更好的传统IO的扩展性;但是如果连接数量较低时,你可能更注重NIO的高吞吐率。
3) 当使用SSL (Secure Sockets Layer,安全套接字层) 工作时,选择NIO则实现难度很大

分享到:
评论

相关推荐

    Java IO 编程集合

    Java IO编程是Java平台中处理输入输出操作的重要组成部分,它提供了丰富的类库,使得开发者能够高效地进行数据的读取、写入、流的管理和转换。在这个集合中,我们主要探讨的是Java IO在文件读写方面的实践应用。 一...

    java-网络编程-io流-学习案例

    IO流在Java中被广泛用于处理数据的读取和写入,包括文件操作、设备交互以及在网络中的数据传输。Java提供了多种类型的流,分为字符流和字节流两大类。字符流处理单个字符,如Reader和Writer,而字节流处理单个字节,...

    一站式学习Java网络编程 全面理解BIO:NIO:AIO1

    java.io 是 Java 中的输入/输出流库,提供了多种流类型,包括字符流和字节流。字符流用于处理文本数据,字节流用于处理二进制数据。 Reader 和 Writer 是 java.io 中的抽象类,提供了基本的读取和写入操作。...

    Java网络编程.chm

    Java中的IO流分为字节流和字符流,它们用于读写数据,包括网络上的数据传输。在Java中,Socket类和ServerSocket类是网络编程的核心,它们分别代表客户端和服务器端的连接端点,通过这些类可以建立TCP连接并进行双向...

    Java-Io流,练习

    Java的IO流是Java编程语言中的重要组成部分,它主要用于数据的输入和输出操作。在Java中,IO流被设计为处理任何类型的数据,包括字符、字节甚至对象。本练习旨在帮助初学者理解和掌握Java IO流的基础知识。 一、IO...

    java网络编程

    java网络编程包括socket tcp/udp io/nio讲解 http协议 jdbc rmi java的安全框架等知识

    Java基础篇:IO流.pdf

    Java IO流是Java编程语言中用于处理输入输出操作的一个重要概念。它允许程序读取数据源或向数据目的地写入数据。Java中的IO流主要分为输入流和输出流两大类,每类又可以根据数据处理方式的不同细分为多种具体实现。...

    Java图书管理系统(IO流版)(csdn)————程序.pdf

    * 使用Java中的IO流来实现图书管理系统的数据存储和读取。 * 了解如何使用Java中的集合来存储和处理图书管理系统中的数据。 八、实体类的设计 * 设计实体类,例如Reader和Book类。 * 使用Java中的Serializable接口...

    JAVA IO流技术

    理解并熟练运用Java IO流技术是开发Java应用程序的关键,它能够有效地处理数据的读写操作,无论是简单的文本文件还是复杂的网络通信。在实际编程中,根据需求选择适当的流类型,结合处理流进行优化,可以构建出高效...

    586.584.JAVA基础教程_IO流-IO流的体系结构(586).rar

    Java中的IO流是进行输入/输出操作的核心机制,它允许程序与各种数据源(如文件、网络连接、内存缓冲区等)进行数据交换。在Java中,IO流被设计为一个层次化的体系结构,便于理解和使用。这个体系结构是根据流的方向...

    java IO流精讲 JAVA IO流实例开发

    总之,Java IO流是Java编程中不可或缺的一部分,理解和熟练使用IO流能够帮助我们更高效地处理数据输入和输出。通过实际的开发案例,我们可以更好地掌握这些概念,并将其应用于实际项目中,提升代码的效率和质量。

    Java快递e栈IO版(控制台简易版)

    在Java编程领域,IO(Input/Output)是处理数据输入和输出的重要部分,而集合则提供了数据存储和操作的抽象。"Java快递e栈IO版(控制台简易版)"项目结合了这两个核心概念,旨在创建一个基于控制台的简单快递管理应用...

    626.624.JAVA基础教程_IO流与网络编程-TCP网络编程例题3(626).rar

    总的来说,Java中的TCP网络编程是通过IO流来实现数据的发送和接收,结合`Socket`和`ServerSocket`类,我们可以构建出强大的网络应用程序。这个教程很可能是通过具体的示例代码,深入浅出地解释如何进行TCP通信,包括...

    Java学生管理系统GUI+IO流

    Java学生管理系统GUI+IO流是一个适合初学者的项目,它主要展示了如何在没有数据库支持的情况下,利用Java的图形用户界面(GUI)和输入输出(IO)流来实现一个简易的学生和教师信息管理功能。这个系统可能包括账户...

    JAVA网络编程

    使用JAVA编写网络通信程序 .doc Java网络编程 ...《JAVA编程规范》.doc Java基础 三步学会Java Socket编程(一) .doc Java基础 三步学会Java Socket编程(二) .doc Java基础 三步学会Java Socket编程(三).doc

    Java 第二阶段提升编程能力【IO流】---- 代码

    Java 第二阶段提升编程能力【IO流】---- 代码 Java 第二阶段提升编程能力【IO流】---- 代码 Java 第二阶段提升编程能力【IO流】---- 代码 Java 第二阶段提升编程能力【IO流】---- 代码 Java 第二阶段提升编程能力...

    JavaIO流详解归纳.pdf

    JavaIO流详解归纳 Java 的核心库 java.io 提供了全面的 IO 接口,包括文件读写、标准设备输出等。Java 中 IO 是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。在项目开发中,IO 是非常...

    Java-Java IO编程教程

    Java IO编程是Java开发中的重要组成部分,它负责处理输入(Input)和输出(Output)数据。在Java中,IO操作涉及到文件读写、网络通信、数据流管理等多个方面,是程序与外部世界交互的关键技术。本教程将通过视频形式...

    JavaIO流详细总结

    Java IO流是Java编程语言中处理输入和输出的重要机制,它允许程序与各种类型的输入源(如键盘、文件、网络连接)以及输出目标(如显示器、文件、网络)进行交互。在Java中,I/O流被设计为面向对象,使得处理数据变得...

    java小项目练习IO实现

    在Java编程领域,IO(Input/Output)技术是不可或缺的一部分,尤其在处理数据持久化、文件操作、网络通信等方面发挥着重要作用。在这个“java小项目练习IO实现”中,我们将探讨如何利用Java的IO流来实现本地数据的...

Global site tag (gtag.js) - Google Analytics