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(); } }