字节流
1.字节流:
(1)字节输入流:InputStream,这个流是一个抽象类,我们在使用时使用FileInputStream类实现文件的输入
(2)字节输出流:OutputStream,这个流是一个抽象类,我们在使用时使用FileOutputStream类实现文件的输出
(3)所有流操作都是在字节流的基础上进行的,通过字节流读取到原始数据,然后交给其他流进行处理
(4)使用字节输入输出流可以操作字符文件,但比较麻烦,需要进行转码.如果操作字符文件建议使用字符流
(5)使用字节流更适合操作图片、音频、视频、压缩包等二进制文件,字符文件也可以操作但不建议
2.带有缓冲区的字节流:
(1)带有缓冲区的字节流属于包装流,对原始流的包装流
(2) Java的IO流提供了一个带有缓冲区的字节输入流(BufferedInputStream)、带有缓冲区的字节输出流(BufferedOutputStream)
(3)由于带有缓冲区的流是对原始流的包装流,所以要使用带有缓冲区的流必须在原始流的基础上使用
(4)缓冲区流是线程安全的,在并发情况可以保证数据的准确性,在缓冲流中使用synchronized同步锁实现
案例
1.字节输出流
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Scanner;
public class 字节输出流 {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
/**
* 创建字节输出流对象,并指定输出的目标文件
* 如果目标文件不存在则自动创建该文件,如果存在则替换该文件
* 当第二个参数设置为true时,表示向文件中追加内容(如果文件不存在依然会创建新文件)
*/
OutputStream outputStream = new FileOutputStream("f:/abcx.txt",true);
//循环向文件输出内容
while(true){
System.out.print("请输入内容:");
String str = scanner.next();
if(str.equals("exit")){
break;//退出