/**
* 使用传统的I/O读取文件内容
* @param filePath 文件路径
* @throws IOException
*/
public static void ioRead(String filePath) throws IOException {
File file = new File(filePath);
FileInputStream fis = new FileInputStream(file);
byte[] b = new byte[1024];
fis.read(b);
System.out.println(new String(b));
}
/**
* 使用NIO读取文件内容
* @param filePath 文件路径
* @throws IOException
*/
public static void nioRead(String filePath) throws IOException {
File file = new File(filePath);
FileInputStream fis = new FileInputStream(file);
FileChannel channel = fis.getChannel();
ByteBuffer b = ByteBuffer.allocate(1024);
channel.read(b);
byte[] by = b.array();
System.out.println(new String(by));
}
/**
* 传统I/O写文件
*
* @param filePath 文件路径
* @throws IOException
*/
public static void ioWrite(String filePath) throws IOException
{
File file = new File(filePath);
FileOutputStream fos = new FileOutputStream(file);
String[] contents = new String[] { "qian", "hao" };
for (String content : contents)
{
byte[] b = content.getBytes(Charset.forName("UTF-8"));
fos.write(b);
}
}
/**
* NIO写文件
* @param filePath 文件路径
* @throws IOException
*/
public static void nioWrite(String filePath) throws IOException
{
File file = new File(filePath);
FileOutputStream fos = new FileOutputStream(file);
// 获取文件通道
FileChannel channel = fos.getChannel();
// 设置文件缓冲区
ByteBuffer buffer = ByteBuffer.allocate(1024);
String[] contents = new String[] { "qian", "hao" };
// 将数据读入缓冲区中
for (String content : contents)
{
buffer.put(content.getBytes());
}
// 通道反转(将读通道转化为写通道)
buffer.flip();
// 将文件写入写通道中
channel.write(buffer);
}
/**
* 将一个文件内容复制到另外一个文件中
* @param resource 源文件路径
* @param destination 目标文件路径
* @throws IOException
*/
public static void nioCopyFile(String resource, String destination)
throws IOException
{
// 设置文件输入流
FileInputStream fis = new FileInputStream(resource);
// 设置文件输出流
FileOutputStream fos = new FileOutputStream(destination);
// 设置输入通道
FileChannel readChannel = fis.getChannel();
// 设置输出通道
FileChannel writeChannel = fos.getChannel();
// 创建缓冲区
ByteBuffer buffer = ByteBuffer.allocate(1024);
// 复制文件
while (true)
{
// 清空缓冲,使其接受新的数据
buffer.clear();
// 从输入通道中将数据写入缓冲区中
int len = readChannel.read(buffer);
// 判断是否文件已读取完成
if (len == -1)
{
break;
}
// 将缓冲区的数据些到另外一个通道,(输入通道反转到输出通道)
buffer.flip();
// 从输出通道将数据写到缓冲区,写入文件中
writeChannel.write(buffer);
}
}
分享到:
相关推荐
《NIO学习总结经典》这篇文章主要探讨了Java的New IO(NIO)框架,这是一个用于高效处理I/O操作的重要库,特别是在处理大量并发连接时。NIO与传统的IO(-blocking I/O)相比,提供了非阻塞的I/O模型,极大地提高了...
### JAVA_NIO学习总结 #### 重要知识点概览 JAVA_NIO(Non-blocking I/O,非阻塞I/O)是Java平台中用于替代传统IO(Blocking IO)的一种高性能IO处理模型,首次出现在JDK 1.4中。NIO通过引入通道(Channel)和缓冲区...
### NIO学习与总结 #### 一、NIO概述与核心概念 **NIO(New IO)**,即新输入/输出技术,是Java 1.4版本开始引入的一种新的I/O处理方式,旨在提高Java应用程序的I/O处理效率。与传统的基于流的I/O相比,NIO更加...
本资料包包含了"nio学习文档及示例代码",旨在帮助开发者快速理解和应用NIO。 **1. NIO基础** NIO的核心组件包括通道(Channels)、缓冲区(Buffers)和选择器(Selectors)。通道是数据传输的路径,如文件通道、...
自己总结的java中NIO的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合java的爱好者和学习者
### Java NIO 学习笔记 #### 一、概述 Java NIO (Non-Blocking IO,也称为 Java New IO),是 Java 对传统 IO 模型的一次重大改进,旨在提高程序处理大量并发连接的能力。NIO 的核心组件包括 Channels、Buffers 和 ...
### Java NIO 系列教程(一):Java NIO 概述 #### 一、引言 Java NIO(New IO)是Java SE 1.4版本引入的一个新的I/O处理框架,它...在未来的学习过程中,继续深入理解这些概念将有助于您更好地掌握Java NIO技术。
总结来说,NIO 和 MINA 为Java网络编程提供了更高效、更灵活的解决方案。相比于传统的阻塞式socket,NIO降低了系统资源的消耗,MINA则进一步简化了NIO的使用,使得开发者能更专注于应用的业务逻辑。对于需要处理大量...
### NIO 入门知识点详解 #### 一、NIO 的引入及其...通过对 NIO 的学习和实践,程序员能够更好地应对现代软件开发中的高性能需求。无论是对于初学者还是有一定经验的开发者来说,掌握 NIO 都是一项非常有价值的技能。
总结来说,NIO网络通信编程是Java中用于构建高性能网络服务的重要技术,通过理解并熟练运用通道、缓冲区和选择器等核心概念,可以设计出高效的并发服务器,满足大规模并发连接的需求。通过学习和实践,我们可以掌握...
NIO学习总结 主要内容: NIO简介: Java NIO 是 java 1.4, 之后新出的一套IO接口NIO中的N可以理解为Non-blocking,不单纯是New。 NIO的特性/NIO与IO区别: 1)IO是面向流的,NIO是面向缓冲区的; 2)IO流是阻塞的,NIO流...
根据提供的文件信息,我们可以提取并总结出关于Java NIO(New Input/Output)的重要知识点。 ### Java NIO 概述 Java NIO 是 Java 平台的一个重要特性,首次出现在 Java 1.4 版本中。它为 Java 开发者提供了一套...
总结来说,Java NIO提供了更高效、灵活的I/O处理机制,特别是对于高并发、大数据量的场景,NIO的优势更为明显。通过学习和掌握NIO,开发者可以编写出更高效、更具扩展性的I/O密集型应用。"NIO修正版書面例子"这个...
总结来说,NIO是Java提供的一种高效、非阻塞的I/O模型,适用于高并发场景,包括通道、缓冲区、选择器等核心组件。通过阅读相关博文和研究代码实例,我们可以深入理解并掌握NIO技术,提高我们的Java网络编程能力。