什么时候用字节流,什么时候用字符流?

chg2008 2005-04-09 10:18:46
写了两个文件复制的程序:
第一个 :
使用FileInputStream,FileOutputStream 如下:
import java.io.*;
public class FileCopy {
private String in;
private String out;
public FileCopy(String inName,String outName) {
in = inName;
out = outName;
}
private void copyFile ()
throws Exception {
FileInputStream fis = new FileInputStream(in);
FileOutputStream fos = new FileOutputStream(out);
byte[] b = new byte[256];
while(fis.read(b)!=-1) {
fos.write(b);
}
fis.close();
fos.close();
}
public static void main(String[] args) throws Exception {
try {
FileCopy fc = new FileCopy("f:\\help.bmp","g:\\help.bmp");
fc.copyFile();
}
catch (Exception e) {
e.printStackTrace();
}
}
}

第二个用BufferedReader,BufferedWriter 如下
import java.io.*;
public class FileCopy {
private String in;
private String out;
public FileCopy(String inName,String outName) {
in = inName;
out = outName;
}
private void copyFile ()
throws Exception {
BufferedReader fis = new BufferedReader(new FileReader(in));
BufferedWriter fos = new BufferedWriter(new FileWriter(out));
char[] b = new char[256];
while(fis.read()!= -1) {
fos.write(b);
}
fis.close();
fos.close();
}
public static void main(String[] args) throws Exception {
try {
FileCopy fc = new FileCopy("f:\\help1.bmp","g:\\help11.bmp");
fc.copyFile();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
结果,第一种方法生成的bmp与原来的一样,而第二种方法生成的bmp却无法打开?
请问是为什么?
...全文
286 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluebilly 2005-04-11
  • 打赏
  • 举报
回复
图片属于二进制文件,不能以文本文件打开,就象用文本打开可执行文件再保存后明显的文件所尺寸不一样啦,你可以试试!
yonggui111 2005-04-10
  • 打赏
  • 举报
回复
处理文本用Reader和Writer,否则用Steam
allenhe 2005-04-09
  • 打赏
  • 举报
回复
BufferedReader是用文本格式打开的说。。就是已经用Charset转换过了。
你去看下源代就知道了。
JAVA基础知识点,(培训资料).摘要IO讲解一节: 本章和集合很象,可能接触到的类很多,但是重点还是只需要通过掌握常用的几个类的使用来熟悉IO操作。在学习过程中也要和集合一样,首先了解JAVA的整个IO包的结构,然后在具体的类的学习中总结常用通用方法,找到相同的规律减少学习时间和难度。 1. 什么是IO? I:input 输入 通常做读取操作(将不同数据源的数据读入到内存中,也叫读取流) O:output 输出 通常做写入操作(将内存中的数据写入到不同的数据源,也叫写入流) 2. 理解流的概念。 想像一下自来水公司要把水输到用户家里,应该先把自来水公司到用户家里的连接水管建好,再将水输出去。管道里输送的是水,但IO里输送的是字节。 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接. 类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样 我们使用JAVA的IO操作,必须要使用java.io里的类,所以在使用之前先要导入这个包 3.了解java.io包下的整体结构层次 按层次高低划分 由低---高 3-1.字节流 •抽象父类是 InputStream 和OutputStream 3-2.字符流 抽象父类是 Reader 和 Writer 3-3.对象流 流的命名很有规律,一般是数据源加上流的名字,如:文件读取流就是FileInputStream,对象流就是ObjectInputStream。 需要注意的是字节流字符流的区别 3-4..字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串(比如对图片文件的操作就只能用字节流) 3-5.一个字符可以是1个字节,也可以是2个或多个字节 一个字节就是8个位,也就是对同一数据源的操作用字符流可能效率更高 3-6.字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以(使用用字节流来传输字符文件会产生乱码) 注意,不管是哪一种流,在数据传输的底层,还是以字节方式传输。

62,630

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧