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编程中,合理地使用这两种流能够提高我们代码的效率和健壮性。