package com.i;
import java.io.*;
public class Test_buffer {
/**
* 字节缓冲区流:缓冲区的构造方法只是为字节流提供了一个缓冲区,底层还是由字节流来完成读写
* BufferedOutputStream:
* BufferedInputStream:
*
* 构造方法:
* public BufferedOutputStream(OutputStream out,
* int size)
* 创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流。
*
* 底层代码如下:
* public BufferedOutputStream(OutputStream out) {
* this(out, 8192);
* }
*
*
*/
public static void main(String[] args) throws FileNotFoundException {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("bb.txt"));
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("bb.txt"));
}
}
编码解码概述图:

package com.i;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
public class Test_liu {
/**
* 字节流读取数据可能出现的问题:
* 汉字占两个字节。一个字节一个字节读取在控制台输出会无法识别出这是个汉字。
*
* 文件的复制一个一个字节复制却可以得到汉字的原因:计算机底层会根据字节进行拼接,得到汉字。
*
* 汉字的存储规则:第一个字节一定是负数,第二个可能是负数也可能是正数,大部分情况下是负数。
*
* 编码表:看图
*
* String的编码和解码:
* 不加参数使用的是平台自己的编码格式
* 编码:byte[] bys = str.getBytes(StandardCharsets.ISO_8859_1);
* 解码:new String(bys,StandardCharsets.UTF_8)
*
* 转换流中的解码和编码问题:
* 转换流其实就是一个字符流。
* 转换流=字节流+编码表
*
* 输入输出流使用方法:
* OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("aa.txt"),“US_ASCII”);
* InputStreamReader isr = new InputStreamReader(new FileInputStream("aa.txt"),"UTF-8");
*
*/
public static void main(String[] args) throws IOException {
// String str = "你好啊";
// byte[] bys = str.getBytes(StandardCharsets.UTF_8);
//
// System.out.println(Arrays.toString(bys));
String str = "你好";
//[-28, -67, -96, -27, -91, -67] 说明平台默认的编码格式是UTF-8
// byte[] bys = str.getBytes();
//[63, 63]
// byte[] bys = str.getBytes(StandardCharsets.ISO_8859_1);
// System.out.println(Arrays.toString(bys));
// System.out.println(new String(bys,StandardCharsets.UTF_8));
//不使用默认UTF-8写入为乱码
// OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("aa.txt"),StandardCharsets.US_ASCII);
// osw.write("你好2");
//使用对应编码读数据
InputStreamReader isr = new InputStreamReader(new FileInputStream("aa.txt"),"UTF-8");
//
int in;
while(-1 != (in = isr.read()) ){
System.out.println("----------------------------");
System.out.println((char)in);
}
// osw.close();
isr.close();
}
}
-----------字符流
package com.i;
import java.io.*;
public class Test_writer {
/**
*字符流写入的方法:
* osw.write(97);
* osw.write('b');
* osw.write(new char[]{'a', 'b', 'c', 'd', 'e'});
* osw.write(new char[]{'a','b','c','d','e'},1,3);
* osw.write("abcde");
* osw.write("abcde",0,3);
*
* 字符流需要刷新的大概原因:一般字符占两个字节,无法判断最后一个字符是否只写了一半,系统不会对文件进行刷新,需要手动刷新。
* osw.flush();
*
* osw.close();关闭字符流里默认调用了flush();
*
* 字符流读数据的两种方法(主要目的复习):
* int i;
* // while(-1!=(i=isr.read())){
* // System.out.print((char)i);
* // }
* char[] cs = new char[1024];
* int len;
* while(-1 != (len = isr.read(cs))){
* System.out.print(new String(cs,0,len));
* }
*/
public static void main(String[] args) throws IOException {
// OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("abb.txt"));
// osw.write(97);
// osw.write('b');
// osw.write(new char[]{'a', 'b', 'c', 'd', 'e'});
// osw.write(new char[]{'a','b','c','d','e'},1,3);
// osw.write("abcde");
// osw.write("abcde",0,3);
// osw.flush();
// osw.close();
InputStreamReader isr = new InputStreamReader(new FileInputStream("src/Test/Test_Students_Test.java"));
// int i;
// while(-1!=(i=isr.read())){
// System.out.print((char)i);
// }
char[] cs = new char[1024];
int len;
while(-1 != (len = isr.read(cs))){
System.out.print(new String(cs,0,len));
}
isr.close();
}
}
----字符流缓冲区
package com.i;
import java.io.*;
public class Test_zfbuffer {
/**
* 字符缓冲区流:
* BufferedReader br = new BufferedReader(new FileReader(""));
* BufferedWriter bw = new BufferedWriter(new FileWriter(""));
*
* 字符流缓冲区的特殊功能:
* BufferedWriter:new Line();//根据操作系统自动加上换行
* for (int i=0;i<3;i++){
* // bw.write("Hello"+i);
* // bw.newLine();//根据操作系统自动加上换行
* // bw.flush();//一般写一行刷新一下,方便确认数据
* // }
*
* public String readLine()
* throws IOException
* 读一行文字。 一行被视为由换行符('\ n'),回车符('\ r')中的任何一个或随后的换行符终止。
* 结果
* 包含行的内容的字符串,不包括任何行终止字符,如果已达到流的末尾,则为null
*/
public static void main(String[] args) throws IOException {
// BufferedWriter bw = new BufferedWriter(new FileWriter("aa.txt"));
//
// for (int i=0;i<3;i++){
// bw.write("Hello"+i);
// bw.newLine();//根据操作系统自动加上换行
// bw.flush();//一般写一行刷新一下,方便确认数据
// }
//
// bw.close();
BufferedReader br = new BufferedReader(new FileReader("aa.txt"));
String str;
while((str = br.readLine()) != null){
System.out.println(str);//
}
br.close();
}
}
2650



被折叠的 条评论
为什么被折叠?



