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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄昆 中级黑马   /  2012-6-26 10:30  /  1749 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 hkylp 于 2012-7-1 09:08 编辑

/*
练习:运用转换流将一个图片文件中的数据拷贝到另一个文件中。

*/

import java.io.*;
class TransStreamTest1
{
        public static void main(String[] args)throws IOException
        {
                FileInputStream fis=new FileInputStream("E:\\ 002.jpg");
                InputStreamReader isr=new InputStreamReader(fis);
                BufferedReader bufr=new BufferedReader(isr);
                FileOutputStream fos=new FileOutputStream("c:\\002.jpg");
                OutputStreamWriter osw=new OutputStreamWriter(fos);
                BufferedWriter bufw=new BufferedWriter(osw);
                String len=null;
                        if ((len=bufr.readLine())!=null)
                        {
                                bufw.write(len);
                                bufw.newLine();
                                bufw.flush();
                        }
                        bufr.close();
                        bufw.close();
        }
}
为什么拷贝的图片打开后没有图像呀?拷贝的图片大小比原图片小很多,为什么?

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
本帖最后由 黑马—陈磊 于 2012-6-26 10:47 编辑

建议多看几遍毕老师的视频,里边讲解的很清楚。
我写了一个拷贝图片的,楼主参考参考
public static void main(String[] args) {
                FileInputStream fin = null;
                FileOutputStream fout = null;
                try {
                        fin = new FileInputStream("e:\\1.jpg");
                        fout = new FileOutputStream("d:\\2.jpg");
                        byte[] b = new byte[fin.available()];
                        int n;
                        while ((n = fin.read(b)) != -1) {
                                fout.write(b, 0, n);
                        }
                } catch (Exception e) {
                        e.printStackTrace();
                } finally {
                        try {
                                fin.close();
                                fout.close();
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }

        }

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 恭喜,黑马见~~

查看全部评分

回复 使用道具 举报
本帖最后由 周兴中 于 2012-6-26 11:44 编辑

                               BufferedReader bufr=
                        new BufferedReader(new InputStreamReader(new FileInputStream("1.bmp"),"UTF-16BE"));//由于InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。而默认的字符集是GBK,图片的字符集是UTF-16BE ,UTF-16LE,所以要想正确编码和解码,需设置字符集为UTF-16BE或UTF-16LE.

                BufferedWriter bufw=
                        new BufferedWriter(new OutputStreamWriter(new FileOutputStream("2.bmp"),"UTF-16BE"));//OutputStreamWriter 同理

点评

其实直接用字节流复制简单些,也不涉及字符集的问题  发表于 2012-7-1 15:23

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
周兴中 发表于 2012-6-26 11:42
BufferedReader bufr=
                        new BufferedReader(new  ...

分析的好,我又学会了一个知识点。谢啦,哥们
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马