IO流
读得懂的就是字符流,读不懂的就是字节流
字节流:
字节流写数据:
字节流问题:
字节流如何实现换行?
windows:\r\n
linux:\n
mac:\r
代码实现:
//创建字节输出流对象,并设置第二个参数为true,再次写入不会从头开始写,不会清除原本的内容 FileOutputStream fi11 = new FileOutputStream("D:\\dim\\dim.txt",true); for (int i = 0; i < 5; i++) { fi11.write("hello".getBytes()); //字节流换行 fi11.write("\r\n".getBytes()); } //释放资源 fill.close; 字节流读数据: 一次读一个数据: //创建字节输入对象 FileInputStream fii = new FileInputStream("D:\\dim\\dim.txt"); //一次读一个数据 //fii.read:读数据 //by = fii.read():将读到的数据赋值给by //by != -1:判断是否读取到最后一个数据 int by ; while ((by = fii.read())!=-1){ System.out.print((char) by); } //释放资源 fill.close; 一次读一个字节数组: //创建字节输入对象 FileInputStream fii = new FileInputStream("D:\\dim\\dim.txt"); //一次读一个字节数组 byte[] bys = new byte[1024]; int a; while ((a = fii.read(bys))!=-1){ System.out.println(new String(bys,0, a)); } /释放资源 fill.close;
字节缓冲数据流:
字节缓冲数据流是为了提高读写数据的
字节输入缓冲流:BufferedInputStream(InputStream in)
字节输出缓冲流:BufferedInputStream(OutputStream out)
字节缓冲流仅仅是提供缓冲区,而真正的读写数据还得依靠基本的额字节流对象操作。
字符流:
为啥会出现字符流呢?
由于字节流操作中不是特别方便,所以java就提供了字符流。
字符流 = 字节流 + 编码表
汉字在进行存储的时候,无论是那种编码,都一个字节都是负数。
代码演示:
String s = "邓"; byte[] b = s.getBytes(); System.out.println(Arrays.toString(b));//[-23, -126, -109] byte[] bytes = s.getBytes(StandardCharsets.UTF_8); System.out.println(Arrays.toString(bytes));//[-23, -126, -109] //解码 String ss = new String(bytes,"UTF-8"); System.out.println(ss);
InputStreamReader:是从字节流到字符流的桥梁
OutputStreamWriter:字符流到字节流的桥梁
代码实现:
//读取字符数据,设置编码为GBK InputStreamReader re = new InputStreamReader(new FileInputStream("D:\\dim\\dim.txt"),"GBK"); //写入字符数据,默认字符编码 OutputStreamWriter rw = new OutputStreamWriter(new FileOutputStream("D:\\dim\\dim.txt")); rw.write("中国"); //释放 rw.close(); //一次读取一个字节 int a ; while ((a = re.read())!=-1){ System.out.print((char) a); } //释放 re.close();