黑马程序员技术交流社区

标题: 关于转换流的问题 [打印本页]

作者: 黄昆    时间: 2012-6-26 10:30
标题: 关于转换流的问题
本帖最后由 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();
        }
}
为什么拷贝的图片打开后没有图像呀?拷贝的图片大小比原图片小很多,为什么?
作者: 黑马—陈磊    时间: 2012-6-26 10:46
本帖最后由 黑马—陈磊 于 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();
                        }
                }

        }
作者: 周兴中    时间: 2012-6-26 11:42
本帖最后由 周兴中 于 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 08:55
周兴中 发表于 2012-6-26 11:42
BufferedReader bufr=
                        new BufferedReader(new  ...

分析的好,我又学会了一个知识点。谢啦,哥们




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2