IO流(输入输出流)是用于处理输入和输出操作的一种机制。它提供了读取和写入数据的方式,可以从文件、网络连接、内存等不同来源读取数据,并将数据写入文件、网络连接、内存等不同目标。
Java的IO流主要分为两种类型:字节流(Byte Stream)和字符流(Character Stream)
字节流和字符流区别
数据类型:
字节流以字节(byte)为单位进行读写操作。
字符流以字符(char)为单位进行读写操作。
底层处理:
字节流直接操作二进制数据,可以处理所有类型的数据。
字符流在底层会使用字节流,但提供了字符集编解码的功能,能够更方便地处理字符数据。
适用内容:
字节流适用于处理二进制数据,例如图像、音频、视频等。
字符流适用于处理文本数据,例如文本文件、配置文件等。
处理效率:
字节流在处理数据时较为直接,处理效率较高。
字符流在处理数据时会进行字符集编解码操作,可能会略微降低处理效率。
使用场景:
字节流适合处理二进制数据和字节流式的操作,如文件复制、网络传输等。
字符流适合处理文本数据和字符流式的操作,如读取文本文件、写入字符数据等。
在选择字节流还是字符流时,应根据处理的数据类型和需求进行选择。如果处理的是二进制数据,或者需要进行底层的字节操作,可以选择字节流。如果处理的是文本数据,或者需要进行字符集编解码操作,可以选择字符流。
IO常见操作代码示例
使用字节流读取文件内容并输出到控制台:
import java.io.FileInputStream; import java.io.IOException; public class ByteStreamExample { public static void main(String[] args) { try (FileInputStream fis = new FileInputStream("input.txt")) { int data; while ((data = fis.read()) != -1) { System.out.print((char) data); } } catch (IOException e) { e.printStackTrace(); } } }
使用字符流读取文件内容并输出到控制台
import java.io.FileReader; import java.io.IOException; public class CharacterStreamExample { public static void main(String[] args) { try (FileReader reader = new FileReader("input.txt")) { int data; while ((data = reader.read()) != -1) { System.out.print((char) data); } } catch (IOException e) { e.printStackTrace(); } } }
使用字符流写入数据到文件
import java.io.FileWriter; import java.io.IOException; public class CharacterStreamWriteExample { public static void main(String[] args) { try (FileWriter writer = new FileWriter("output.txt")) { String data = "Hello, World!"; writer.write(data); } catch (IOException e) { e.printStackTrace(); } } }