Java IO是Java核心API中的一个重要模块,它提供了许多类用于读写数据,主要包括字节流和字符流两种类型,本文将介绍这两种流的区别和使用。
字节流是以字节(byte)为单位进行读写的,主要包括InputStream
和OutputStream
两类。使用字节流可以读写任意类型的数据,例如图像、音频等二进制文件。
try (InputStream in = new FileInputStream("test.jpg")) { byte[] buffer = new byte[1024]; int len; while ((len = in.read(buffer)) >0) { // TODO: 处理读取的字节数据 } } catch (IOException e) { e.printStackTrace(); }
字符流是以字符(char)为单位进行读写的,主要包括Reader
和Writer
两类。使用字符流可以方便地读写文本文件。
try (Reader reader = new FileReader("test.txt")) { char[] buffer = new char[1024]; int len; while ((len = reader.read(buffer)) >0) { // TODO: 处理读取的字符数据 } } catch (IOException e) { e.printStackTrace(); }
需要注意的是,字符流使用的编码方式是由InputStreamReader
和OutputStreamWriter
来指定的,默认是按照系统编码方式进行读写。如果要指定其他编码方式,需要手动创建相应的编码器。
try (Reader reader = new InputStreamReader(new FileInputStream("test.txt"), StandardCharsets.UTF_8)) { // TODO: 使用UTF-8编码方式读取文件内容 } catch (IOException e) { e.printStackTrace(); }
在使用IO流时,需要注意及时关闭流资源,可以使用try-with-resources语句自动关闭流。
总的来说,字节流适用于读写任意类型的数据,而字符流适用于读写文本数据。