java 20 - 8 字节流的文件复制以及汉字在计算机中的存储方式
复制文本文件:把当前目录下的FileIntputStream.java文件里面的内容复制到当前目录的b.txt文件中
分析:
数据源:
FileIntputStream.java -- 读取数据 -- FileInputStream
目的地:
b.txt --- 写入数据 ---- FileOutputStream
思路:首先读取数据源的内容,然后把读取到的内容再写入到目的地中
前提:数据源存在,否则会报错
1 import java.io.FileInputStream; 2 import java.io.FileOutputStream; 3 import java.io.IOException; 4 public class CopyFileDemo1 { 5 6 public static void main(String[] args) throws IOException { 7 //首先从数据源中读取数据 8 //创建字节输入流 9 FileInputStream in = new FileInputStream("a.txt"); 10 //创建字节输出流 11 FileOutputStream out = new FileOutputStream("b.txt"); 12 //使用读取字节的方式读取数据 13 int by = 0; 14 while((by = in.read()) != -1){ 15 //读取到的数据直接输入到目的地中 16 out.write(by); 17 } 18
in.close();
out.close();
19 } 20 21 }
在上述的a.txt文件中,就算是中文,也能够完整复制到b.txt里面。
原因:因为这里是从数据源中读取数据后,并没有进行转码,又直接复制到目的地中。
说到这里,就有个疑问:计算机是怎么对汉字进行存储的?
String s = "中国是我们的祖国; byte[] bys = s.getBytes(); System.out.println(Arrays.toString(bys));
结果是:[-42, -48, -71, -6, -54, -57, -50, -46, -61, -57, -75, -60, -41, -26, -71, -6]
从就可以看出,在计算中,汉字的存储是分成两个字节的:
第一个字节肯定是负数。
第二个字节常见的是负数,可能有正数。但是没影响。
复制图片、视频、MP4之类的一样的操作,只是后两者的读取数据方式应该用
int read(byte[] b):一次读取一个字节数组
需求:复制D:\music\音乐里的Beyond - 真的爱你.mp3到文件目录下
1 //使用字节输入流输出mp3文件 2 //定义字节输入流对象 3 FileInputStream in = new FileInputStream("D:\\music\\音乐\\Beyond - 真的爱你.mp3"); 4 //定义字节输出流对象 5 FileOutputStream ou = new FileOutputStream("真的爱你.mp3"); 6 //使用输入字节数组的方法输入内容 7 //定义一个字节数组 8 byte[] by = new byte[1024]; 9 int i = in.read(); 10 while(i != -1){ 11 //使用字节输出流输入内容 12 ou.write(by,0,i); 13 } 14 in.close(); 15 ou.close();
字节流的两种读取方式的图解:
何事都只需坚持..
难?
维熟尔。
LZL的自学历程...只需坚持