1.嵌套的输入流
DataInputStream din = new DataInputStream(new BufferedInputStream(new FileInputStream("1.dat")));
这里 需要从一个文件中读入数据,数据是数字类型,FileInputStream 没有读入数字类型的方法,也没有缓存机制,DataInputStream没有从文件中读数据的方法,
因此可以用重重嵌套构造一个新的构造器。
2.文本操作
PrintWriter 和BufferedReader(new FileReader("2.txt"))
一个典型的输入系统是:
String line;
while(line = in.readLine() != null){
do sth;
}
然而BufferedReader没有任何读入数字的处理方法,建议使用Scanner来输入文本。
3.read()方法读文件
File f = new File(path);
InputStream fis = new FileInputStream(f);
int l = 0;
byte[] buf = new byte[2]; //只有两个字节的缓冲区
while((l=fis.read(buf)) != -1){
System.out.println(new String(buf,0,l));
}
System.out.println("length:" + l);
读到文件末尾时会返回-1,作为判断条件,缓冲区只有两个字节,即一个中文,这样出来的结果 一个字一行,且 l永远为0。
四.使用nio来读取和写入文件。
在nio中,读取和写入文件都是对缓冲区进行的。读是从缓冲区中读数据,写是向缓冲区中写数据。因此,在读和写之前,总是先要创建一个缓冲区Buffer,
有不同类型的缓冲区,主要的,使用最多的是ByteBuffer,即字节缓冲区。
1.创建缓冲区方法:
ByteBuffer buf = ByteBuffer.allocate(1024);
2.nio中使用通道来执行读或取得操作。通道是双向的,能读能写,以块为数据单位。通道都是通过输入输出流来获取的,所以输入输出流还是要的,只不过
这里只是为了从它们中获取通道。
从输入输出流中获取channel
FileInputStream fin = new FileInputStream( infile );
FileOutputStream fout = new FileOutputStream( outfile );
FileChannel fcin = fin.getChannel();
FileChannel fcout = fout.getChannel();
3.得到了通道和缓冲区,则可以进行文件的读写了。读是使用channe从缓冲区中读,写是使用channel向缓冲区中写。我们使用上面的缓冲区和通道:
fcin.read(buf);
fcout.write(buf);
这里还要介绍缓冲区的两个方法;
每个缓冲区都有一个容量,一个当前位置。
clear() 清空缓冲区,让缓冲区可以重新使用,位置回0;
flip() 位置回0,这样使用get方法可以对缓冲区进行遍历。
4.一个例子 copyFile 复制文件
package com.wlc.nio;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import static java.io.File.separator;
public class CopyFile {
public static void main(String[] args) throws IOException {
String path = "C:" + separator + "Users" + separator + "wlc"
+ separator + "Desktop" + separator + "项目修改点.txt";
String to = "C:" + separator + "Users" + separator + "wlc"
+ separator + "Desktop" + separator + "项目修改点2.txt";
copyFiles(path, to);
}
public static void copyFiles(String from, String to) throws IOException {
FileInputStream in = new FileInputStream(from);
FileOutputStream out = new FileOutputStream(to);
FileChannel fcin = in.getChannel();
FileChannel fout = out.getChannel();
ByteBuffer buf = ByteBuffer.allocate(1024);
while (true) {
buf.clear();
int r = fcin.read(buf); //从通道中读数据到缓冲区,读一个buf,下面就写入一个buf
if (r == -1) { //如果r = -1,则说明读完数据了,就跳出了
break;
}
buf.flip(); //这里在写之前千万要记住先flip一下,不然指针指到了buf的最后,写出来的为空了
fout.write(buf); //将缓冲区中数据写入通道
}
}
}
5.缓冲区分片
我们可以对一个缓冲区进行分片,所谓分片,即从一个已有的缓冲区中分出一个片段来,实际还是原来那个缓冲区,相当于一部分,或叫子缓冲区。这个
子缓冲区可以用来执行一些特定的操作。
一个缓冲区分片的例子:
package com.wlc.nio;
import java.nio.ByteBuffer;
public class T3 {
public static void main(String[] args) {
ByteBuffer buf = ByteBuffer.allocate(10);
for(int i = 0;i < 10;i ++){
buf.put((byte) i);
}
buf.position(3); //分片起始位置
buf.limit(6); //分片区的终点位置
ByteBuffer slice = buf.slice();
for(int i = 0;i < 3;i ++){ //创建的分片位置从0开始算
int temp = slice.get(i) * 10; //给每个值乘以10
slice.put(i, (byte)temp);
}
buf.flip();
buf.limit(buf.capacity());
while(buf.hasRemaining()){
System.out.println((int)buf.get());
}
}
}
运行结果:
0
1
2
30
40
50
6
7
8
9
6.nio scatter/gather 分散和聚合
参考:点击打开链接
参考:http://www.cnblogs.com/rollenholt/archive/2011/09/11/2173787.html点击打开链接
分享到:
相关推荐
### Java IO流学习笔记 #### 一、IO流的四大抽象类 - **InputStream/OutputStream**:字节的输入输出流的抽象类。 - 数据单位:字节(8比特,范围0-255) - **Reader/Writer**:字符的输入输出流的抽象类。 - ...
本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...
Java IO流是Java编程语言中处理输入输出操作的重要部分,尤其在数据传输、文件读写等方面发挥着核心作用。本文将深入探讨Java IO流的基本概念、类型以及它们在实际开发中的应用。 首先,理解IO流的基本概念至关重要...
笔记会讲解如何在Java中读写文件,理解流的概念,以及文件的复制、追加等操作。 在面向对象高级特性的部分,笔记可能包含抽象类、接口、内部类、匿名类、枚举,以及泛型和注解的使用。这些特性使得Java代码更加灵活...
在Java中,输入/输出(Input/Output,简称IO)操作是程序与外部设备进行数据交换的重要方式。Java提供了强大的IO流处理类库,主要位于`java.io`包中。这些类库支持多种数据类型的操作,包括文本文件、二进制文件等。...
### Java IO流学习笔记 #### 异常处理与IO流操作 在进行Java IO流的学习过程中,异常处理是非常重要的一个方面。本节将详细介绍如何在Java中处理异常,并结合具体的IO流操作进行说明。 #### 一、异常处理 在Java...
【Java编程基础】 ...以上是黑马Java教程知识点笔记的主要内容,涵盖了Java编程的基础到进阶知识,是学习和巩固Java技能的重要参考资料。通过深入理解和实践这些知识点,开发者可以逐步提升Java编程能力。
4. **IO流**:介绍输入/输出流的概念,包括文件操作、字节流、字符流、对象序列化等。这部分内容涉及数据的读写和传输。 5. **网络编程**:讲解Socket编程,如何创建客户端和服务器进行网络通信,以及HTTP、HTTPS...
4. **try-with-resources语句**:这个新特性允许自动关闭实现了`AutoCloseable`接口的资源,如文件流,提高了代码的健壮性和可读性。 5. **NIO.2文件系统API**:引入了`java.nio.file`包,提供了一套新的文件系统...
5. IO流:Java的IO流系统支持对文件、网络、内存等进行输入输出操作。流分为字节流和字符流,又分为输入流和输出流。还有缓冲流、对象流、转换流等高级流概念。 6. 网络编程:Java提供Socket和ServerSocket类进行...
标准I/O流与文件 Java提供了强大的I/O处理能力。 - **文件操作**:读取、写入、删除等操作。 - **跨平台性**:Java的文件操作不受操作系统限制。 - **序列化接口**:用于将对象转换为字节流以便持久化。 - **I/O...
“尚硅谷JAVA基础笔记”涵盖了Java语言的基础知识,包括语言概述、基本语法、面向对象概念、封装、继承和多态,以及一些关键概念如形参与实参、属性与局部变量、构造器、this关键字、包和MVC设计模式的使用。...
5. **输入/输出流**:学习如何使用FileInputStream、FileOutputStream、BufferedReader、BufferedWriter等进行文件操作。 6. **多线程**:掌握Thread类和Runnable接口,线程同步机制,如synchronized关键字、wait()...
4. **IO流**:Java的输入/输出流系统提供了丰富的功能,用于读写文件、网络通信等。笔记会讲解流的分类、缓冲流、字符流与字节流的区别,以及NIO(非阻塞I/O)的相关知识。 5. **多线程**:Java支持多线程编程,...
IO流是Java中处理数据传输的核心概念,包括字节流和字符流,以及如何进行文件读写、网络通信等操作。 2. **25、SpringBoot入门及原理.pdf**:SpringBoot是Java企业级应用开发的热门框架,简化了Spring的配置和启动...
Java的IO库支持字符流和字节流,它们可以读取或写入文件、网络、内存等不同来源的数据。此外,还有缓冲区流、转换流和对象流等高级流,以满足不同场景的需求。 最后,"多线程"在现代编程中不可或缺。Java内置了对多...
5. **IO流**:输入/输出流的概念,文件操作,以及字节流和字符流的区别。 6. **多线程**:线程的基本概念,线程同步与互斥,以及线程池的使用。 7. **网络编程**:Socket编程,TCP与UDP的区别,以及如何建立客户端...
* 1.5 Linux命令与相关知识:Linux是Java开发的常用操作系统,Linux命令包括文件管理命令、目录管理命令、权限管理命令等。 * 1.6 Eclipse/Myeclipse程序结构:Eclipse和Myeclipse是流行的Java开发环境,提供了项目...
7. **输入/输出流**:Java的I/O流用于读写文件和网络数据,笔记可能涵盖了FileInputStream、FileOutputStream、BufferedReader、BufferedWriter等基本流的使用。 8. **集合框架**:如ArrayList、LinkedList、...
4. **文件I/O流编程**:读写文件、数据序列化等。 5. **网络编程**:TCP/IP协议的应用,如客户端/服务器模型。 6. **多线程编程**:利用多线程提高程序性能。 #### Java EE基础知识 1. **Java面向对象编程**:与...