作者:Flyingis
JDK1.4开始便引入了java.nio.*包,其目的在于提高I/O的速度,这是因为该类库使用的结构更接近于操作系统执行I/O的方式,即通过通道和缓冲器来读写数据。在实际应用中,和我们直接交互的是缓冲器,然后把缓冲器派送到通道,通道要么从缓冲器获得数据,要么向缓冲器发送数据。
<!----><o:p></o:p>
在基于Java的各种开发中,字符编码是常见的问题之一,在最基本的Java I/O中也存在这种问题。新的Java I/O通过通道和缓冲器来读写数据,缓冲器容纳的是普通的字节,为了把它们转换成字符,我们要么在输入的时候对其进行编码,要么在从缓冲器输出时对它们进行解码。
<o:p></o:p>
import java.io.*;<o:p></o:p>
import java.nio.*;<o:p></o:p>
import java.nio.channels.*;<o:p></o:p>
import java.nio.charset.*;<o:p></o:p>
public class ByteToCharacter {<o:p></o:p>
private static final int SIZE = 1024;<o:p></o:p>
public static void main(String[] args) throws Exception {<o:p></o:p>
FileChannel fc = new FileOutputStream(“Output.txt”).getChannel();<o:p></o:p>
ByteBuffer buffer = ByteBuffer.allocate(SIZE);<o:p></o:p>
/**<o:p></o:p>
* 在输入的时候进行编码方式一<o:p></o:p>
*/<o:p></o:p>
fc.write(ByteBuffer.wrap(“Good holiday!”.getBytes(“UTF-16BE”))); // UTF-16BE可以更换为其他编码方式
fc.close();<o:p></o:p>
fc = new FileInputStream(“Output.txt”).getChannel();<o:p></o:p>
fc.read(buffer);<o:p></o:p>
buffer.flip(); //准备从缓冲区读取已经写入的数据<o:p></o:p>
System.out.println(buffer.asCharBuffer());<o:p></o:p>
/**<o:p></o:p>
* 在输入的时候进行编码方式二<o:p></o:p>
* 通过asCharBuffer()方法直接以char形式将字符写入<o:p></o:p>
*/<o:p></o:p>
fc = new FileOutputStream(“Output.txt”).getChannel();<o:p></o:p>
buffer.clear();<o:p></o:p>
buffer.asCharBuffer.put(“Good holiday has passed!”);<o:p></o:p>
fc.write(buffer);<o:p></o:p>
fc.close();<o:p></o:p>
fc = new FileInputStream(“Output.txt”).getChannel();<o:p></o:p>
buffer.clear();<o:p></o:p>
fc.read(buffer);<o:p></o:p>
buffer.flip();<o:p></o:p>
System.out.println(buffer.asCharBuffer());<o:p></o:p>
/**<o:p></o:p>
* 从缓冲器输出时进行编码<o:p></o:p>
*/<o:p></o:p>
fc = new FileOutputStream(“Output.txt”).getChannel();<o:p></o:p>
fc.write(ByteBuffer.wrap(“Once again!”.getBytes()));<o:p></o:p>
fc.close();<o:p></o:p>
fc = new FileInputStream(“Output.txt”).getChannel();<o:p></o:p>
buffer.clear();<o:p></o:p>
fc.read(buffer);<o:p></o:p>
buffer.flip();<o:p></o:p>
String encode = System.getProperty(“file.encoding”); // 平台缺省字符集,更加通用的方法,跨平台特性的体现之一
System.out.println(Charset.forName(encode).decode(buffer));<o:p></o:p>
}<o:p></o:p>
}
<o:p></o:p>
在上述代码中,如果不对从缓冲器写入的数据进行正确编码,那么当再次通过缓冲器读取这些数据时,将不能显示任何所需要的数据。
<o:p></o:p>
JDK中的java.nio.charset.Charset类提供了把数据编码成多种不同类型的字符集的工具,满足在各种应用中的编码需求。<o:p></o:p>
分享到:
相关推荐
Java 新I/O,也称为NIO(New Input/Output),是Java平台中对传统I/O模型的一种改进。在Java 1.4版本中引入的NIO库为开发人员提供了更高效、非阻塞的数据处理方式,特别适用于高并发、低延迟的系统。NIO的核心在于...
Java I/O 编程是Java开发中的重要组成部分,主要用于处理数据的输入与输出。下面将详细阐述其中的关键概念和方法。 1. 数据流的概念及输入输出方法: 数据流是计算机中进行数据传输的通道,包括从外部设备到程序的...
过滤流(Filter Stream)是Java I/O框架中的一个重要概念,它提供了一种优雅的方式来进行数据的读写操作,同时允许我们添加额外的功能,如字符编码转换、数据压缩等。本篇文章将深入探讨Java I/O中的过滤流,以及...
Java 1.0 和 1.1 中的I/O类主要是基于两个基础类:`InputStream`和`OutputStream`,它们处理字节流。`InputStream`家族包括了如`ByteArrayInputStream`、`FileInputStream`等,它们分别从字节数组或文件中读取数据。...
Java I/O(输入/输出)系统是Java编程语言中用于处理数据流的重要组成部分,它允许程序与外部资源如文件、网络、硬件设备等进行交互。深入理解Java I/O的工作机制对于开发高效、可靠的系统至关重要。以下是对Java I/...
Java I/O(输入/输出)是Java编程语言中不可或缺的一部分,它允许程序与外部资源进行数据交换,如文件、网络连接、系统硬件等。在Java I/O中,我们使用流(Stream)的概念来处理数据,流是数据传输的通道。本套习题...
Java中的I/O流处理是程序与外部设备交互数据的关键机制,包括从文件、网络、内存等数据源读取数据和向这些目标写入数据。I/O流系统在Java的`java.io`包中被实现,提供了丰富的类和接口来支持各种类型的流操作。 **I...
在Java中,I/O操作主要基于流(Stream)的概念,流可以被视为数据的有序序列,既可以代表从源读取数据,也可以用于向目标写入数据。本文将深入探讨Java I/O层次结构,包括核心类、接口和它们的关系,以及常见用法。 ...
Java中的I/O流是程序与外部数据交互的重要机制,它允许数据在程序、文件、网络等之间流动。I/O流分为两大类:字符流(Character Stream)和字节流(Byte Stream),每类又分为输入流(Input Stream)和输出流...
Java中的I/O系统不仅涵盖了文件的读写,还包括网络数据交换、内存数据处理及控制台输入输出等多个方面。 Java通过引入流的概念,将各种不同类型的数据源(如文件、网络、内存)统一抽象为流,简化了程序员对不同...
Java中的I/O(输入/输出)是编程中一个至关重要的概念,特别是在处理文件操作、网络通信和数据交换时。在Java中,I/O是通过一系列流(Stream)类来实现的,这些类允许数据从一个源头(如键盘、文件、网络连接)传输...
Java I/O系统是Java平台中用于处理输入和输出的核心组件,它允许程序与外部资源进行交互,如磁盘文件、网络连接、系统设备等。在Java中,输入和输出流被设计为对象,使得数据传输变得简单且高效。本章节将深入探讨...
Java I/O, NIO以及NIO2是Java编程语言中处理输入输出操作的重要API集合,它们分别代表着不同的I/O处理方式和技术。 Java I/O是指传统的I/O操作,涉及经典的I/O类库,如File、RandomAccessFile以及各种流类(stream ...
Java I/O流是Java编程语言中的一个重要组成部分,用于在程序和外部资源(如磁盘、网络、内存等)之间传输数据。本教程涵盖了从基础到高级的Java流知识,包括文件读写、缓冲流、对象序列化等多个方面。 1. **文件的...
这本书详尽地涵盖了Java输入/输出(I/O)相关的各种概念和技术,旨在帮助程序员提升在处理数据流、文件操作、网络通信以及字符编码等方面的能力。 1. **Java I/O基础**: - Java I/O框架概述:书中介绍了Java I/O...
在Java编程语言中,I/O流(Input/Output Stream)是处理数据输入和输出的核心机制。本课程设计报告书——“Java课程设计报告书-学生版-1_I/O流与文件课程设计_”旨在帮助学生深入理解并掌握如何在Java中进行文件操作...
总的来说,理解Java的I/O系统需要掌握流的概念、缓冲技术、字符编码转换、非阻塞I/O、文件操作、网络通信以及对象序列化等多个方面。这些知识点构成了Java I/O系统的基础,是开发任何Java应用时都需要了解和掌握的...
Java语言中的二进制输入/输出(Binary I/O)是程序设计中不可或缺的一部分,尤其是在处理非文本数据如图像、音频或自定义数据结构时。在本章中,我们将深入理解二进制I/O与文本I/O的区别,并探讨Java I/O框架如何...
在Java编程语言中,编码转换是一项重要的任务,特别是在处理不同来源的数据时,如读取文本文件、网络数据传输或数据库交互。本资源包含一个名为`CodeConvert.java`的源代码文件,它提供了对多种编码格式进行转换的...
Java的I/O(输入/输出)系统是Java编程语言中不可或缺的一部分,它允许程序与外部世界进行数据交换。本文将对Java I/O进行详细的总结,包括基本概念、流的分类、缓冲区、转换流以及高级特性。 首先,理解Java I/O的...