`

Java Channel解析与实例

阅读更多

文件IO

FileChannel是处理文件IO中的核心Channel实现。FileChannel不能直接构建,只能通过FileInputStream,FileOutputStream,RandomAccessFile通过getChannel()获得FileChannel实例对象,获得的FileChannel对象的权限也由相关的File对象所限制,也就说说FileInputStream所获得的Channel对象只能使用read(),如果使用write(),则会相关异常。

 

FileChannel是线程安全的,多个现在可以共享一个FileChannel实例并发调用read,write而不会产生多线程问题。

在操作系统层面,一个FileChannel与一个文件描述符一一对应。操作系统内核通过文件描述符来访问文件,文件描述符是一个非负整数,打开或创建文件的时候,系统内核会返回一个文件描述符,读写文件也时需要文件描述符来指定待读写的文件。

内存映射文件

 

FileChannel可以通过map()方法得到MappedByteBuffer,这个方法在一个打开文件和一个特殊类型的ByteBuffer之间建立一个虚拟内存映射。这个类有两个关键的API,load()将虚拟内存直接转载到物理内存中;force()将修改后的Buffer写入带磁盘中。

 

由于批量传输在IO中频繁的出现,以普通IO的方式惊醒批量传输性能又不高,所以FileChannel为批量传输提供了高效的API,transferTo和transferFrom,需要将一个通道交叉到另外一个通道并且不通过缓存区。

 

 

文件IO总时阻塞的,因此不能设于非阻塞模式下(磁盘特性造成)。对于文件IO,最大的意思是异步IO,他可以使得一个线程处理多个IO的时候,可以不必等待IO的完成,而是使用异步的模式,在完成之后回调事件中执行相关的逻辑,当然如果需要阻塞等待的时候,也可以在异步的模式中声明等待完成,可以使用异步的Future。在Java7中,AIO被纳入了NIO的范畴内,这里的NIO的N不是非阻塞的意思,而时新的意思,即新IO。

 

 

 

分享到:
评论

相关推荐

    Java网络编程/Java网络编程实例

    Java网络编程是Java开发中的重要领域,它涵盖了网络应用程序的设计、实现和调试。在这个主题下,我们可以探讨多个关键知识点: 1. **Java Socket编程**:...阅读和分析这些实例,是提升Java网络编程技能的有效途径。

    java网络编程实例.rar

    `java.nio`包下的`Selector`和`Channel`等类可以实现单线程处理多个连接,减少了线程的创建和管理成本。 7. **HTTP协议**:Java也可以用来实现基于HTTP协议的应用,如Web服务器或者客户端。`java.net....

    java版本RabbitMQ实例.rar.rar

    Java版本的RabbitMQ实例是将高效的消息中间件RabbitMQ与强大的编程语言Java结合的典型应用。RabbitMQ是一个开源的消息代理和队列服务器,它允许应用程序之间通过消息进行异步通信。在这个实例中,我们将深入探讨如何...

    java网络开发实例

    4. **NIO(非阻塞I/O)**:在高并发场景下,Java的非阻塞I/O模型,如Selector和Channel,可以提高性能。NIO允许单个线程处理多个连接,这对于聊天室这样的应用尤其重要。 5. **JSP(Java Server Pages)**:标签中...

    java开发Redis实例

    在Java代码中,你首先需要创建一个Jedis实例,连接到本地或远程的Redis服务器: ```java Jedis jedis = new Jedis("localhost", 6379); jedis.auth("your_password"); // 如果有密码 ``` 接着,我们可以使用Jedis...

    Java网络编程实例

    URL(统一资源定位符)是网络资源的唯一标识,Java的java.net.URL类提供了解析和访问URL的功能。URLConnection是Java访问网络资源的抽象类,所有用于访问URL的类都继承自它。通过建立URLConnection对象,可以读取或...

    Java网络编程实例(随书源代码)

    - **NIO(非阻塞I/O)**:Java的新I/O API提供了选择器(Selector)和通道(Channel),能实现高效的异步I/O操作。 - **HTTP通信**:使用HttpURLConnection或第三方库(如Apache HttpClient)实现HTTP客户端和...

    JavaNIO服务器实例Java开发Java经验技巧共6页

    本资料"JavaNIO服务器实例Java开发Java经验技巧共6页"可能是某个Java开发者或讲师分享的一份关于如何在Java中构建NIO服务器的教程,涵盖了6个关键页面的内容。尽管具体的细节无法在此直接提供,但我们可以根据Java ...

    Java NIO——Selector机制解析三(源码分析)

    本文将深入探讨Java NIO中的Selector机制,并通过源码分析来理解其实现原理。 Selector机制是Java NIO中的核心组件,它允许单线程同时监控多个通道(Channels)的状态变化,例如连接就绪、数据可读或可写等。这种...

    Java NIO原理分析及代码实例

    Java NIO(New IO)是Java 1.4版本引入的一个新API,全称为Non-blocking Input/Output,它提供了一种不同于传统IO的编程模型,传统IO基于块I/O,而NIO则基于通道(Channel)和缓冲区(Buffer)进行数据传输。...

    java网络编程实例

    通过分析提供的"java网络编程实例",你可以学习到如何将理论知识应用于实际项目。 总之,Java网络编程是开发跨平台网络应用的基础,理解并掌握其核心概念和API,能帮助你构建高效、可靠的网络应用程序。通过实践和...

    基于Java的实例源码-用Java写的SFTP代码.zip

    在Java中实现SFTP功能,通常会使用JSch库,这是一个Java实现的SSH2库,提供了解析、建立和维护SSH2连接的能力,包括SFTP子系统。 以下是一些关键的Java SFTP知识点: 1. **JSch库**:JSch是Java中实现SFTP的主要库...

    NettyChannel

    NettyChannel是一个基于Netty框架的测试程序,它...通过分析和运行`NettyServer`和相应的客户端程序,可以深入了解Channel在实际操作中的行为,包括连接建立、数据交换和关闭流程,有助于开发者更好地掌握Netty框架。

    JAVA网络实例源代码

    `java.nio`包中的`Selector`、`Channel`和`Buffer`等类是其核心组件。 6. **HTTP协议处理**:在实际应用中,我们可能需要处理HTTP请求。Java的`HttpURLConnection`类可以用来发送GET、POST等HTTP请求,而`javax....

    java 读取写入csv

    ### Java读取与写入CSV文件的详细解析 在日常的软件开发中,处理CSV(Comma Separated Values)文件是一种常见的需求,特别是在数据分析、数据导入导出等场景下。Java作为一种广泛使用的编程语言,提供了多种方式来...

    java高手真经:网络开发卷源码

    《Java高手真经:网络开发卷源码》是一份专为Java开发者提供的宝贵资源,它聚焦于Java在网络开发领域的应用,包含丰富的源代码实例。在深入理解Java编程语言的基础上,这份资料将帮助开发者提升在网络编程方面的技能...

    MQ消息队列实例

    在Java中,我们可以使用多种库来与MQ进行交互,如Apache ActiveMQ、RabbitMQ、IBM WebSphere MQ等。本实例将主要探讨Java向MQ发送消息的三种常见方法。 1. **JMS(Java Message Service)接口** JMS是Java平台定义...

    Java高手真经(网络开发卷)源码

    通过阅读和分析这份源码,开发者可以深入理解Java网络编程的原理,掌握实用技巧,提高解决实际问题的能力。同时,源码中的注释和设计模式也会为学习者提供宝贵的编程经验。无论是初学者还是经验丰富的开发者,都能...

Global site tag (gtag.js) - Google Analytics