java中的FileInputStream()是字节流,但为啥可以读取汉字,即在c://dest.txt中写入汉子也能被读出?妹求 5
importjava.io.*;publicclassTestFileCopy_Stream{publicstaticvoidmain(String[]args)thro...
import java.io.*;
public class TestFileCopy_Stream {
public static void main(String[] args)throws Exception {
int b = 0;
FileInputStream in ;
FileOutputStream out ;
//数据源,用于向程序中读取信息
in = new FileInputStream("c://source.txt");
//目标文件,程序将信息写到此文件中,会自动创建文件
out = new FileOutputStream("c://dest.txt");
while((b=in.read())!=-1){//一次读一个字节,判断是否读到文件结尾
out.write(b);//一次写一个字节
}
in.close();
out.close();
System.out.println("文件已复制");
}
} 展开
public class TestFileCopy_Stream {
public static void main(String[] args)throws Exception {
int b = 0;
FileInputStream in ;
FileOutputStream out ;
//数据源,用于向程序中读取信息
in = new FileInputStream("c://source.txt");
//目标文件,程序将信息写到此文件中,会自动创建文件
out = new FileOutputStream("c://dest.txt");
while((b=in.read())!=-1){//一次读一个字节,判断是否读到文件结尾
out.write(b);//一次写一个字节
}
in.close();
out.close();
System.out.println("文件已复制");
}
} 展开
5个回答
展开全部
用程序来解释更能说明问题
你source.txt里把内容改一下,内容为:a你好b
然后执行下面的程序看
public class Test {
public static void main(String[] args) throws Exception {
int b = 0;
FileInputStream in;
FileOutputStream out;
// 数据源,用于向程序中读取信息
in = new FileInputStream("c:/source.txt");
// 目标文件,程序将信息写到此文件中,会自动创建文件
out = new FileOutputStream("c:/dest.txt");
int count = 0;
while ((b = in.read()) != -1) {// 一次读一个字节,判断是否读到文件结尾
out.write(b);// 一次写一个字节
if (count++ >= 2) {
/*
* 假设:你source.txt内容是:a你好b
* 此处为人为不读取完,就退出,
* 就会出现某个中文字符是由2个字节组成而有乱码
* (此处暂且算中文字符是2个字节,暂且以GB2312编码为例)
* (utf8的中文有可能是2个,大部分中文占3个,少部分占4个字节)
*
* 这里程序人为的读取source.txt到第3个字节的时候就中断,
* 这时只读取了两个字节:a你(你是2个字节组成
* 而你只读两个字节就中断,那么你字只读取了1个字节,就出现乱码)
* 此时,如果你把count++ >= 1改为count++ >= 2;
* 就会读3个字节出来:a你 此时就可以读出来了,就是正确的字符
*
* 你原来的程序就是把source.txt全部读取出来了
* 又写出到dest.txt所以你这时感觉不到如果有中文
* 此中文如不读取完整的2个字节就有乱码的情况
* 因为你是完整的读出又写出了,没有中断过
*/
break;
}
}
in.close();
out.close();
System.out.println("文件已复制");
}
}
展开全部
只是把文件内容按字节复制到另一个文件而已。没牵扯到编解码,为什么不可以?
另外其他几个说汉字2字节的,拜托,只是常用的中文Windows默认的GBK是这样。UTF-8可不是。
另外其他几个说汉字2字节的,拜托,只是常用的中文Windows默认的GBK是这样。UTF-8可不是。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
英文是单字节,汉字是双字节,在Fileinputstream里,它把文件读取并转换成byte数组。
之后就是Fileoutputstream的逆转换,把byte数组转换成字符。
在这一过程中,英文和汉子的区别仅仅在单双字节。你可以试一下,如果读取一半输出的话,汉字的转换如果正截取到某个汉字的一个字节,会出乱码。
之后就是Fileoutputstream的逆转换,把byte数组转换成字符。
在这一过程中,英文和汉子的区别仅仅在单双字节。你可以试一下,如果读取一半输出的话,汉字的转换如果正截取到某个汉字的一个字节,会出乱码。
追问
试了,无论我输入多少汉字,都能一字不乱地复制过去???不解啊???
追答
while((b=in.read())!=-1)是一直读到尾
你可以这样测
for(int i=0;i<3;i++){
out.write(b);
}
这样就会出乱码
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-09-06
展开全部
其实,电脑中任何的数据,都是按字节保存的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
拜托,一个汉字占2个字节好不,哥
更多追问追答
追问
对呀,但是Fileinputstream是字节流啊,所以他读取汉字是英爱会出现乱码啊,如果不是,那要字符流干嘛???求详解!!!
追答
I don't know
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询