当前位置 : 主页 > 编程语言 > java >

Java IO字节流深入分析

来源:互联网 收集:自由互联 发布时间:2022-09-02
文章目录 ​​一、分类​​ ​​二、字节流​​ ​​2.1 字节输出流(OutputStream)​​ ​​2.1.1 输出流的方法​​ ​​2.1.2 输出流的使用​​ ​​2.2 字节输入流(InputStream)​​ ​​2.2


文章目录

  • ​​一、分类​​
  • ​​二、字节流​​
  • ​​2.1 字节输出流(OutputStream)​​
  • ​​2.1.1 输出流的方法​​
  • ​​2.1.2 输出流的使用​​
  • ​​2.2 字节输入流(InputStream)​​
  • ​​2.2.1 输入流的方法​​
  • ​​2.2.2 输入流的使用​​
  • ​​三、字节流实例练习​​
  • ​​四、补充说明​​

一、分类

Java IO流分为字节流与字符流:

输入流

输入流

字节流

InputStream

OutputStream

字符流

Reader

Writer

Java IO字节流深入分析_输出流

二、字节流

  • 文件数据在存储时,都是以二进制数字的形式保存的,即文件就是一个个字节,传输时同样如此。所以,字节流可以传输任意文件。
2.1 字节输出流(OutputStream)

以(FileOutputStream extends OutputStream):将内存中的字节写入到文件中

2.1.1 输出流的方法
  • 构造方法:
    – public FileOutputStream(String name):创建一个向指定文件中写入数据的输出文件流。
    –public FileOutputStream(String name, boolean append):创建一个向指定文件中追加数据的输出文件流。
  • close(): 关闭此输出流并释放与此流相关联的任何系统资源(完成流操作时,必须调用此方法)。
  • flush() : 刷新此输出流并强制任何缓冲的输出字节被写入。
  • wrtie(byte[] b):将整个字节数组写入此输出流。
  • write(byte[] b,int off,int len): 从字节数组的偏移量off开始,将len长度的字节写入到此输出流。
2.1.2 输出流的使用
  • 创建一个FileOutputStream对象,构造方法中传递写入数据的文件路径;
  • 调用FileOutputStream对象的方法write,把数据写入到文件中;
  • 调用close释放资源。
/**
* 深入分析IO字节流--FileOutputStream
*
* @author zhuhuix
* @date 2020-06-14
*/
public class OutputStreamDemo {

public static void main(String[] args) throws IOException {
// 单字节写入
OutputStream stream = new FileOutputStream("c:\\a.txt");
// 写数据的时候,会把10进制数转换成2进制数:即99->1100001
stream.write(97);
stream.close();

// 多字节写入
byte[] bytes = {97,98,99};
stream = new FileOutputStream("c:\\abc.txt");
stream.write(bytes);
stream.close();

// 数组偏移量写入
stream = new FileOutputStream("c:\\ab.txt");
stream.write(bytes,0,2);
stream.close();

// 写入中文
stream = new FileOutputStream("c:\\aaa.txt");
stream.write("中文".getBytes());
stream.close();
}
}/**
* 深入分析IO字节流--FileOutputStream追加数据
*
* @author zhuhuix
* @date 2020-06-14
*/
public class OutputSrteamAppendDemo {
public static void main(String[] args) throws IOException {
// 单字节写入
OutputStream stream = new FileOutputStream("c:\\a.txt");
// 写数据的时候,会把10进制数转换成2进制数:即99->1100001
stream.write(97);
stream.close();

// 追加数据写入
stream = new FileOutputStream("c:\\a.txt",true);
// 循环追加10次
for (int i=0;i<10;i++) {
stream.write("\r\n".getBytes());
stream.write(97);
}
stream.close();
}
}
2.2 字节输入流(InputStream)

以(FileInputStream extends InputStream):将文件中的字节数据读取到内存中

2.2.1 输入流的方法
  • 构造方法:
    – public FileInputStream(String name):创建一个向指定文件读取数据的输入文件流。
  • close(): 关闭此输入流并释放与此流相关联的任何系统资源(完成流操作时,必须调用此方法)。
  • int read() : 从输入流中读取数据的下一个字节。
  • int read(byte[] b):从输入流中读取一定数量的字节,存储在缓冲区数组中。
  • int read(byte[] b,int off,int len): 将输入流中偏移量off开始,长度为len的字节读入到缓冲区数组中。
2.2.2 输入流的使用
  • 创建一个FileInputStream对象,构造方法中传递读取数据的文件路径;
  • 调用FileInputStream对象的方法read,把文件中的字节数据读取到内存中;
  • 调用close释放资源。
/**
* 深入分析IO字节流--FileInputStream
*
* @author zhuhuix
* @date 2020-06-14
*/
public class InputStreamDemo {
public static void main(String[] args) throws IOException {

InputStream stream = new FileInputStream("c:\\a.txt");
// 读取一个字节,文件末尾返回-1
System.out.println(stream.read());

// 循环读取单个字节
int b;
while ((b = stream.read()) != -1) {
System.out.print((char)(b));
}
stream.close();

// 读取多个字节
stream = new FileInputStream("c:\\abc.txt");
byte[] bytes = new byte[1024];
int len;
while ((len = stream.read(bytes)) != -1) {
System.out.println(new String(bytes,0,len));
}
stream.close();

}
}

三、字节流实例练习

  • 文件复制:将C盘根目录下的logo.png复制到D盘根目录下。
/**
* 深入分析IO字节流--通过字节流进行复制
*
* @author zhuhuix
* @date 2020-06-14
*/
public class FileCopyByStream {
public static void main(String[] args) throws IOException {
// 创建一个字节输入流绑定C盘根目录下的logo文件
FileInputStream fileInputStream = new FileInputStream("c:\\logo.png");
// 创建一个字节输出流绑定将要复制到D盘根目录下的同名文件
FileOutputStream fileOutputStream = new FileOutputStream("d:\\logo.png");

// 定义一个字节数组,放置输入流读出的字节流
byte[] bytes = new byte[1024];
// 循环读取字节流并写入输出流中
int len;
while ((len=fileInputStream.read(bytes)) != -1) {
fileOutputStream.write(bytes,0,len);
}

// 先关闭输出流,后关闭输入流
fileOutputStream.close();
fileInputStream.close();
}
}

四、补充说明

使用字节流类读取中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储,所以Java提供了字符流类,以字符为单位进行读写,专门用于处理文本文件的输入输出。


上一篇:当层遇到下拉框时
下一篇:没有了
网友评论