Java I/O(输入/输出)主要被用来处理输入数据和输出结果。
在Java中,输入/输出操作被当作流(Stream)进行处理。流是一个连续的数据流入或数据流出的通道。流操作在Java中主要可以分为两种类型:字节流和字符流。
一、字节流
字节流可以处理所有类型的数据(如图片,视频,音频等)。在Java的java.io
包中,包含了所有操作输入/输出的类和接口。这些类和接口均被设计为字节流形式。
字节流的两个基类是:
- InputStream:所有的字节输入流类都是这个类的子类
- OutputStream:所有的字节输出流类都是这个类的子类。
以下是一个使用字节流读取数据的例子:
import java.io.*;
public class TestByteStream {
public static void main(String args[]) {
try {
byte bWrite[] = {11,21,3,40,5};
OutputStream os = new FileOutputStream("test.txt");
for (int i = 0; i < bWrite.length; i++) {
os.write(bWrite[i]);
}
os.close();
InputStream is = new FileInputStream("test.txt");
int size = is.available();
for (int i = 0; i < size; i++) {
System.out.print((char) is.read() + " ");
}
is.close();
} catch (IOException e) {
System.out.println("Exception: " + e);
}
}
}
二、字符流
相对于字节流,字符流处理的是字符数据,专门用于处理文本(String,char等)。字符流的基类是Reader和Writer。
- Reader:所有的字符输入流类都是这个类的子类。
- Writer:所有的字符输出流类都是这个类的子类。
以下是一个使用字符流读取数据的例子:
import java.io.*;
public class TestCharStream {
public static void main(String args[]) throws IOException {
char c[] = new char[30];
Reader read = new FileReader("test.txt");
int len = read.read(c);
System.out.println("从文件中读取的字符数 : " + len);
for (int i = 0; i < len; i++) {
System.out.print(c[i]);
}
read.close();
}
}
在处理输入/输出流时,需要注意的是,系统不会自动关闭流,需要我们手动调用close()
方法来关闭流,防止出现数据的丢失。
通过以上的介绍,希望你对Java中的输入/输出流有了更多的了解。在Java编程中,合理地使用这两种流能够提高我们代码的效率和健壮性。