A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 孙百鑫 于 2013-6-30 08:43 编辑
  1. class Test1
  2. {
  3.         public static void main(String[] a)throws IOException
  4.         {
  5.                 BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("D:\\javafile\\day19\\src\\a.jpg")));
  6.                 BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:\\javafile\\day19\\src\\b.jpg")));
  7.                 String s=null;
  8.                 while((s=br.readLine())!=null)
  9.                 {
  10.                         System.out.println(s);
  11.                         bw.write(s);
  12.                 }
  13.                 br.close();
  14.                 bw.close();
  15.         }
  16. }
复制代码
比如35k的图a,复制了图b却只有32k,打不开

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 神马都是浮云

查看全部评分

8 个回复

倒序浏览
图片你也用字符流来转?
回复 使用道具 举报
你的IO流操作有错误,图片要使用字节流操作,纯文本数据才可以使用这符流。
如下:
回复 使用道具 举报
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

class Test1

{

        public static void main(String[] a)throws IOException

        {

                BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D:\\a.jpg"));

                BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("D:\\b.jpg"));
                int len=0;
               
                while((len=bis.read())!=-1)

                {

                       
                        bos.write(len);

                }

               bis.close();

               bos.close();

        }

}

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我正有个疑问,字节类型的文件能否用字符流来复制,你这个例子就来了,我还没试过。
不过你这个读取的方法有问题吧?字节文件能读一行吗?一个一个字符的读还有点可能吧
回复 使用道具 举报
刘渝灵 发表于 2013-6-27 16:47
我正有个疑问,字节类型的文件能否用字符流来复制,你这个例子就来了,我还没试过。
不过你这个读取的方法 ...

一行一行和一个一个我都试过,挂了,前面同学说的对,不能用字符流,改成字节流就对了。
我用InputStreamReader把字节流转换成字符流是因为学到这了没分清楚,以为想转就能转呢。
回复 使用道具 举报
我试了下还是不行,也许确实不行。字节数据在编码解码的过程中,安照编码表有些字节可能根本没有对应的码值而用其他的码值替代了,这样一来数据就不准确了。可是为什么我复制出来的文件比原来的还大呢
回复 使用道具 举报
孙茜茜 发表于 2013-6-27 16:57
一行一行和一个一个我都试过,挂了,前面同学说的对,不能用字符流,改成字节流就对了。
我用InputStream ...

1、图片是没有换行符的嘛,另外读取到的数据是会删掉换行符的字节/字符数据,也就会将读到符合换行符的字节数据丢失;
2、用字符流读取一般字节数据,因为是双字节操作,所以过程难免会发生错误(这个一下子想不到例子)。
3、说下转换流的使用吧,个人理解:   
说白了,转换流就是字符流读取字节文件的基石,转换流(InputStreamReader等)是文件字符流(FileReader等)的父类,读取字符文件数据底层应该还是字节流,只不过通过转换流(起到装饰转换作用)将读取到的数据转换成字符数据,可给其他字符流操作(文件字符流也就是封装两个功能的流类而已)。
这应该可以帮助你理解转换流的使用,带有很重的个人理解,呵呵,仅供参考,帮助理解而已。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主您好,帖子长时间没有动态我已经将您的帖子改成已解决。如有问题请私密我哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马