在理解这个小项目之前得先了解字节和字符以及io流的相关知识,io寒假的时候找一天抽空来整理一下io。
字节和字符:
计算机中的存储单元是字节,字节可以包含任意二进制数据,因此所有数据,包括字符,最终都会以字节的形式在计算机内存中存储。处理不同数据的时候像中文英文等等,字符通常会被转换成相应的字节表示,这个过程称为字符编码。不同的字符编码方案(例如UTF-8、UTF-16、ASCII等)会以不同的方式将字符映射到字节序列。这样,文本文件中的字符就被表示为一系列字节,这些字节可以被计算机正确地存储和处理。至于怎么转的,先不查找了感觉相当麻烦,所以归根来说任何东西在底层都是会转化为字节进行存储(后面再考证一下)
字节是由8位组成,字符是由16位组成两个字节,字节本身是由0和1组成的毕竟存储与计算机而当用io流读出的时候是因为其根据其对应的解码转化为整数给我们参考,不同的解码方式所表示的整数范围右不同这取决于原来的是用asc码编还是其他码编。
加密解密
既然想加密解密文件自然是通过对其字节进行改动,总不能在字符上改动吧,那么就通过读入读出对字节进行改动,像加1啊七七八八的
import java.io.*; public class first { public static void jia () throws IOException { FileInputStream fip =new FileInputStream("C:\\Users\\ASUS\\Desktop\\zjx.txt"); byte[] bt=fip.readAllBytes(); for (int i = 0; i < bt.length; i++) bt[i] += 5; FileOutputStream fos =new FileOutputStream("C:\\Users\\ASUS\\Desktop\\zjx.txt"); fos.write(bt); fip.close(); fos.close(); } public static void jie () throws IOException { FileInputStream fip = new FileInputStream("C:\\Users\\ASUS\\Desktop\\zjx.txt"); byte[] bt = fip.readAllBytes(); for (int i = 0; i < bt.length; i++) bt[i] -= 5; FileOutputStream fos = new FileOutputStream("C:\\Users\\ASUS\\Desktop\\zjx.txt"); fos.write(bt); fip.close(); fos.close(); } }