练习1
分别使用节点流:FileInputStream、FileOutStream和缓冲流:BufferedInputStream、BufferedOutStream实现图片视频文件的复制,并比较在数据复制方面的效率。
练习代码见前几篇文章。
练习2
实现图片加密操作。
提示:
int b = 0;
while ((b = bis.read()) != -1) {
fos.write(b ^ 5)
}
练习代码
/**
* 图片的加密
*/
@Test
public void test1() {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("photomode.png");
fos = new FileOutputStream("photomode_encryption.png");
byte[] buffer = new byte[10];
int len;
while ((len = fis.read(buffer)) != -1) {
for (int i = 0; i < len; i++) {
buffer[i] = (byte) (buffer[i] ^ 5);
}
fos.write(buffer, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fos != null)
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (fis != null)
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
练习3
获取文本上每个字符出现的次数
提示:每遍历文本每一个字符,字符及出现的次数保存在Map中;将Map中数据写入文件。
练习代码
package com.ch.exer;
import org.junit.Test;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
*
* 计算文本文件中字符出现的频率
*
* @author chenpi
* @create 2022-03-03 10:26
*/
public class WordCount {
@Test
public void test() {
BufferedReader br = null;
Map<Character, Integer> map = null;
try {
FileReader fr = new FileReader("hello.txt");
br = new BufferedReader(fr);
char[] cbuf = new char[1024];
int len;
map = new HashMap<Character, Integer>();
while ((len = br.read(cbuf)) != -1) {
for (int i = 0; i < len; i++) {
if (map.containsKey(cbuf[i])) {
map.put(cbuf[i], map.get(cbuf[i]) + 1);
} else {
map.put(cbuf[i], 1);
}
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println(map);
}
}