package com.yyq;
import java.io.*;
import java.util.concurrent.SynchronousQueue;
/*
* 字符流:
* FileReader
* FileWriter 主要学习了这四个
* BufferedReader
* BufferedWriter
* LineNumberReader
* 字节流
* 需求: 想要操作图片数据。这是就要用到字节流
* 所以要操作文件对象
* InputStream OutpuStream(写)
*/
public class FileDemo {
public static void main(String[] args) throws Exception {
readFile_3();
}
public static void readFile_1() throws IOException{
FileInputStream fis = new FileInputStream("1.jpg");
int ch = 0;
while((ch=fis.read())!=-1){
System.out.println((char)ch);
}
}
public static void readFile_2() throws IOException{
FileInputStream fis = new FileInputStream("1.jpg");
byte[] buf = new byte[1024];
int num = 0;
while((fis.read(buf))!=-1){
System.out.println(buf);
}
}
// 第三种方式要慎用,这种方式,可能内存异常
public static void readFile_3() throws IOException{
FileInputStream fis = new FileInputStream("1.txt");
// 定义一个刚刚好的缓冲区,不需要在循环了
// 字节流可以操作很多多媒体文件,虚拟机默认是64M
byte[] buf = new byte[fis.available()];
fis.read(buf);
// System.out.println(new String(buf));
}
public static void writeFile() throws Exception{
FileOutputStream fos = new FileOutputStream("fos.txt");
// 将字符串转化成字节数组
fos.write("aaa".getBytes());
// 没刷新,没关闭,字符流走的是字节,把字节临时存储,之后去查表
// 字符流底层也是使用的字节流的缓冲区,所以字符流需要刷新
// 字节流是不需要刷新的。缓冲区之后才涉及到刷新操作
//fos.flush();
fos.close();
}
}