最近在学习JAVA的IO知识,对书上的一个例子很感兴趣,例子的代码如下:
import java.io.*;
public class WriteBytes {
public static void main(String[] args) {
int[] data={71,73,70,56,57,97,15,0,15,0,128,0,0,
                      255,255,255,0,0,0,44,0,0,0,0,15,0,15,0,0,2,33,
      132,127,161,200,185,205,84,128,241,81,35,
                       175,155,26,228,254,105,33,102,121,165,201,145,169,
      154,142,172,116,162,240,90,197,5,0,59};
try{
FileOutputStream file=new FileOutputStream("pic.gif");
for(int i=0;i<data.length;i++){
file.write(data[i]);
}
file.close();
}catch (IOException e){
System.out.println(e);
}
}
}
运行完后会生成一个上面有个字母J的gif格式的图片.
我就想,是不是图片都可以表示成数组里的那一串数字,然后用字节流写到文件里就可以显示出来了呢?
于是我写一个小程序用FileInputStream把一张小图片读出来,再用BufferedWriter读出来的整数用逗号分隔,写到一个文件data.txt里.打开data.txt文件可以看到一大串整数,然后再写一个小程序用BufferedReader读data.txt,把读取的整数再用FileOutputStream写成一个gif的文件.结果打开生成的这个gif图片里面什么也没有,不能显示原来的图片.想不明白为什么,有没有那位高手可以帮我看看,用什么方法可以让图片能正常显示?
谢谢了.

解决方案 »

  1.   

    1,图片都可以采用字节流写入到文件中的,图像处理工具就是这样做的,但必须符合图像文件的规范。
    2,读到data.txt中的数字是连在一起的还是用什么分隔开来的?
      

  2.   

    import java.io.*;
    import java.util.*;
    public class PToT {
    public static List keys=new ArrayList();
    public static void pTot(String pName,String tName) throws IOException{
    //字节流读取文件
    FileInputStream file=new FileInputStream(pName);
    FileWriter out=new FileWriter(tName); while(file.read()!=-1){
    int input=file.read();
    keys.add(Integer.toString(input));
    }

    for(int i=0;i<keys.size();i++){
    String key=keys.get(i).toString();
    count++;
    if(count%100==0){
    out.write(key+"\n");
    }
    else{
    out.write(key+",");
    }
    }
    file.close();
    out.close();
    System.out.println(count);
    }

    public static void tTop(String tName,String pName) throws IOException{
    BufferedReader in=new BufferedReader(new FileReader(tName));
    FileOutputStream out=new FileOutputStream(pName);
    String key="";
    while((key=in.readLine())!=null){
    String[] keys=key.split(",");
    for(int i=0;i<keys.length;i++){
    int j=Integer.parseInt(keys[i]);
    out.write(j);
    }
    }
    in.close();
    out.close();
    }
    public static void main(String[] args) { try{
    pTot("3.gif","3.txt");
    tTop("3.txt","4.jpg");
    }catch(IOException e){
    System.out.println(e.getMessage());
    }

    }}
    我写的程序就是这个样子的.
    帮我看一下.
      

  3.   

    我的代码生成新的图片都是可以用的啊?import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Scanner;public class Test {
        public static void main(String[] args) throws IOException {
            writeGIF("f:/pic.gif");
            readGIF("f:/pic.gif", "f:/pic.data");
            writeNewGIF("f:/pic.data", "f:/pic_.gif");
        }    private static void writeGIF(String filename) throws IOException {
            int[] data = { 71, 73, 70, 56, 57, 97, 15, 0, 15, 0, 128, 0, 0, 255,
                    255, 255, 0, 0, 0, 44, 0, 0, 0, 0, 15, 0, 15, 0, 0, 2, 33, 132,
                    127, 161, 200, 185, 205, 84, 128, 241, 81, 35, 175, 155, 26,
                    228, 254, 105, 33, 102, 121, 165, 201, 145, 169, 154, 142, 172,
                    116, 162, 240, 90, 197, 5, 0, 59 };
            OutputStream os = new FileOutputStream(filename);
            for (int i = 0; i < data.length; i++) {
                os.write(data[i]);
            }
            os.close();
            System.out.println("图片生成完成");
        }    private static void readGIF(String src, String dist) throws IOException {
            BufferedWriter bw = new BufferedWriter(new FileWriter(dist));
            InputStream is = new FileInputStream(src);
            int n;
            while((n = is.read())!=-1){            
                bw.write(n + ",");
            }
            is.close();
            bw.close();
            System.out.println("图片读取完成");
        }
        
        private static void writeNewGIF(String src, String dist) throws IOException {
            Scanner scanner = new Scanner(new File(src));
            scanner.useDelimiter(",");
            OutputStream os = new FileOutputStream(dist);
            while(scanner.hasNext()) {
                int s = scanner.nextInt();
                os.write(s);
            }
            os.close();
            scanner.close();
            System.out.println("新图片生成完成");
        }
    }
      

  4.   

    这句错了:while(file.read() != -1) { 
        int input=file.read(); 
        keys.add(Integer.toString(input)); 
    }改成:int tmp;
    while ((tmp = file.read()) != -1) {
        int input = tmp;
        keys.add(Integer.toString(input));
    }知道为什么了吗?
      

  5.   

    import java.util.Scanner;
    这个有错呀,我把这句话到eclipse里不行.
      

  6.   

    啊,你的JDK版本是多少?
    用 java -version 查看一下。Scanner是JDK1.5新增加的。如果你的JDK版本是1.5以上的,那可能是Eclipse的编译级别低了。菜单Window → Preferences... → Java → Compiler,将 Compiler compliance level 调至 5.0 或以上。
      

  7.   

    调至5.0后,keys.add(Integer.toString(input)); 这句会出现警告,将:
    public static List keys = new ArrayList();改为:
    public static List<String> keys = new ArrayList<String>();就不会有警告了。
      

  8.   

    高手,谢谢了.
    我的JDK版本太低了:java version "1.3.1_01",我去下个新的去.
    正在学习JAVA,多谢高手指导了.