JAVAIO流总结02
处理流:套接在已有流的基础上
缓冲流(处理流的一种),使用缓冲流会加速读写速度
原因:内部提供了一个缓冲区(8192)
public static void test6() throws IOException {
//文件
File inFile = new File("a.png");
File outFile = new File("b.png");
//节点流
FileInputStream fileInputStream = new FileInputStream(inFile);
FileOutputStream fileOutputStream = new FileOutputStream(outFile);
//处理流
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
byte[] bitbuffer = new byte[20];
int len = fileInputStream.read(bitbuffer);
while (len!=-1){
fileOutputStream.write(bitbuffer,0,len);
len = fileInputStream.read(bitbuffer);
}
//先关最外层的流,内层的流也会被自动挂不必
bufferedInputStream.close();
bufferedOutputStream.close();
}
public static void test4() throws IOException {
File inFile = new File("my.txt");
File outFile = new File("out.txt");
FileReader fileReader = new FileReader(inFile);
FileWriter fileWriter = new FileWriter(outFile);
BufferedReader br = new BufferedReader(fileReader);
BufferedWriter bw = new BufferedWriter(fileWriter);
String str;
str = br.readLine();//读取一行,不包括换行符
while (str!=null){
// bw.write(str+"\n"); 都可以
bw.write(str);
bw.newLine();
str = br.readLine();
}
bw.close();
br.close();
}
图片的加密解密
public class testbuffer {
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream = new FileInputStream("b.png");
FileOutputStream fileOutputStream = new FileOutputStream("c.png");
byte[] bitybuffer = new byte[1024];
int len = fileInputStream.read(bitybuffer);
while (len!=-1){
//对字节数组进行加密
for (int i = 0; i < len; i++) {
bitybuffer[i] = (byte) (bitybuffer[i]^5);//反过来就是解密
}
fileOutputStream.write(bitybuffer,0,len);
len = fileInputStream.read(bitybuffer);
}
fileInputStream.close();
fileOutputStream.close();
}
}
获取文本每个字符的出现次数
(遍历每个字符,字符及其出现的次数保存在Map中),将Map中的数据写入文件即可
public class CountChar {
public static void main(String[] args) throws IOException {
FileReader fileReader = new FileReader("my.txt");
FileWriter fileWriter = new FileWriter("count.txt");
HashMap<Character,Integer> map = new HashMap<>();
int charcode = fileReader.read();
while (charcode!=-1){
char c = (char) charcode;
if(map.get(c)==null){
map.put(c,1);
}else {
map.put(c,map.get(c)+1);//字符数+1
}
charcode = fileReader.read();
}
//存入文件
Set<Map.Entry<Character, Integer>> entrySet = map.entrySet();
Iterator<Map.Entry<Character, Integer>> iterator = entrySet.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
fileWriter.write(String.valueOf(iterator.next())+"\n");
}
fileReader.close();
fileWriter.close();
}
}
转换流(处理流的一种):提供了字符流和字节流的转换
InputStreamReader 字符流
将字节的输入流 转换 为字符的输入流
OutputStreamWriter 字节流
将字节的输出流 转换 字符的输出流
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream = new FileInputStream("my.txt");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);//转换流,字节流转字符流
char[] charbuffer = new char[2];
int len = inputStreamReader.read(charbuffer);
while (len!=-1){
String str = new String(charbuffer,0,len);
System.out.println(str);
len = inputStreamReader.read(charbuffer);
}
inputStreamReader.close();//关闭最外层即可
}
(
编码:
ASCII ——》 {GBK,GBK2312.....} ——》 unicode(可变长编码)
0xxxxxxx 0xxxxxxx,1xxxxxxx xxxxxxxx
)