摘要:当学习了Java NIO和IO的API后,一个问题马上涌入脑海: 我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异、它们的使用场景,以及它们如何影响您的代码设计。 1. Java NIO和IO的主要区别 下表总结了Java NIO和IO之间的主要差别,我
阅读全文
摘要:1. Java NIO 管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。 这里是Pipe原理的图示: 2. Pipe使用 (1)创建管道 通过Pipe.open()方法打开管道。例如: (2)向管道写数据 要向管道
阅读全文
摘要:1. Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。 2. DatagramChannel的使用 (1)打开 DatagramChannel 下面是 DatagramChannel
阅读全文
摘要:1. Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。 这里有个例子: 2.ServerSocketChannel
阅读全文
摘要:1. Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel: 打开一个SocketChannel并连接到互联网上的某台服务器。 一个新连接到达ServerSocketChannel时,会创建一个SocketChannel
阅读全文
摘要:Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。 FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。 1. 打开FileChannel 在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要
阅读全文
摘要:Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。 1. 为什么使用Selector? 仅用单个线程来处理多个Channels的好处是,只需要更少的线程来处理
阅读全文
摘要:1. 在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel。 (1)transferFrom(): FileChannel的 transferFrom()方法可以将数据 从 源通
阅读全文
摘要:1. Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道)中读取或者写入到Channel的操作。 分散(scatter): 从Channel中读取是指在读操作时将读取的数据写入多个buffer中。因此
阅读全文
摘要:Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。 1. Buffer的基本用法 使用B
阅读全文
摘要:1. Java NIO的Channel(通道)类似 Stream(流),但又有些不同: 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。 通道可以异步地读写。 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。 正如上面所说,从通道读取数据到缓冲区,从
阅读全文
摘要:1.Java NIO 由以下几个核心部分组成: Channels(通道) Buffers(缓冲区) Selectors(选择器) 虽然Java NIO 中除此之外还有很多类和组件,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是
阅读全文
摘要:1. I/O 简介 I/O ( 输入/输出 ):指的是计算机与外部世界或者一个程序与计算机的其余部分的之间的接口。它对于任何计算机系统都非常关键,因而所有 I/O 的主体实际上是内置在操作系统中的。单独的程序一般是让系统为它们完成大部分的工作。 在 Java 编程中,直到最近一直使用 流(Strea
阅读全文
摘要:1. 使用Properties完成猜数字小游戏只能玩5次的案例:2. 代码实现:(1)猜数字游戏GuessNumber: 1 package cn.itcast_08; 2 3 import java.util.Scanner; 4 5 /** 6 * 这是猜数字小游戏 7 * 8 * ...
阅读全文
摘要:1. 我有一个文本文件(user.txt),我知道数据是键值对形式的,但是不知道内容是什么。请写一个程序判断是否有"lisi"这样的键存在,如果有就改变其值为"100"分析: A:把文件中的数据加载到集合中 B:遍历集合,获取得到每一个键 C:判断键是否有为"lisi"的,如果有就修改其值为"...
阅读全文
摘要:1. Properties和IO流集合使用这里的集合必须是Properties集合: public void load(Reader reader):把文件中的数据读取到集合中 public void store(Writer writer,String comments):把集合中的数据存储到...
阅读全文
摘要:1. Properties的特殊功能1 public Object setProperty(String key,String value):添加元素2 public String getProperty(String key):获取元素3 public Set stringPropertyName...
阅读全文
摘要:1. Properties的概述Properties:属性集合类。是一个可以和IO流相结合使用的集合类。该类主要用于读取以项目的配置文件(以.properties结尾的文件 和 xml文件)。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。Propertie...
阅读全文
摘要:1. 什么是 序列化 和 反序列化 ? 序列化 (Serialization):将对象的状态信息转换为可以存储或传输的形式的过程。比如转化为二进制、xml、json等的过程。 在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。一
阅读全文
摘要:1. SequenceInputStream合并流的概述:SequenceInputStream类可以将多个输入流串联在一起,合并为一个输入流,因此,该流也被称为合并流。2.SequenceInputStream的构造方法:SequenceInputStream(InputStream s1, In...
阅读全文