今天做一个东西,要读取一个文件,然后把读取的内容放到一个byte数组中,然后再根据byte数组,写进一个新文件,但是新文件与原文件不一样
用的方法如下:
File of = "text.jpg";
byte[] b = new byte[(int) of.length()];
oFIS.readFully(b);
//此处把b的内容写入
//oFIS.write(b);  //此时可以正常写入,文件也可以打开
但如果用下面的方法就不行
StringBuffer s = new StringBuffer();
for(int i = 0;i<b.length;i++){
    s.append((char)((int)b[i]));
}
string str = s.toString();
oRAF.write(str.getBytes()); //此时写入的文件就有问题,虽然大小一样,但是文件无法打开如果用
while(-1 != (buf = oFIS.read()))
{
    c = (char)buf;
    s.append(c);
}
str = s.toString();
oRAF.writeBytes(str);
也可以正常写进文件,并且也可以正常打开 
不知道这里面是什么原因,导致第一种方法不能用的???
int到char的内部转换到底是怎么实现的???还有呀
我用winhex比较了一下两个文件的内容
前面几个字节不一样,并且中间有一些乱了,大部分的数据还是一样的
原文件前面字节的内容为:ff
在新文件中就变成了3f
这是为什么????

解决方案 »

  1.   

    char 和 int 的转换看ascii表
      

  2.   

    对了
    还有一个问题
    那就是
    如果用:
    String str = new String(b);  /*oFIS.readFully(b);*/
    这时候输出str字串的长度
    就会出现str的长度小了很多在上面的贴子中发出来的方法str的长度却没有减小
      

  3.   

    呵呵
    我只是给出了几句代码恩
    我把全部的贴出来
    import java.applet.Applet;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.io.*;
    import javax.media.Buffer;
    import javax.media.util.*;
    public class FirstApplet extends Applet{ private static final long serialVersionUID = 1L;
    Image img=null;
    int buf = -1;
    String str = "";
    char c;
    File f;
    RandomAccessFile oRAF;
    BufferToImage bti;
    Buffer bf;
    ImageToBuffer itb;
    public void init(){
    img = getImage(getDocumentBase(),"mm.jpg");
    File of = new File("mm.jpg");
    f = new File("test.jpg");
    try {
    oRAF = new RandomAccessFile(f,"rw");
    } catch (FileNotFoundException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    };
    try {
    RandomAccessFile oFIS = new RandomAccessFile(of,"rw");
    byte[] b = new byte[(int) of.length()];
    oFIS.readFully(b);
    //for(byte bt:b)
    // System.out.print(bt);
    StringBuffer s = new StringBuffer(); String aa = "";
    for(int i = 0;i<b.length;i++){
    s.append((char)((int)b[i]));
    if(i<4)
    System.out.print((char)((int)b[i]));
    }

    System.out.println("\n" +b[0]+""+b[1]+""+b[2]);
    aa = s.toString();
    oRAF.write(aa.getBytes()); } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    public void paint(Graphics g)
    {
    g.drawImage(img,0,0,200,200,this);
    }
    }
      

  4.   

    javax.media.Buffer;这是什么包啊?
    好象没什么印象.