今天做一个东西,要读取一个文件,然后把读取的内容放到一个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
这是为什么????
用的方法如下:
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
这是为什么????
还有一个问题
那就是
如果用:
String str = new String(b); /*oFIS.readFully(b);*/
这时候输出str字串的长度
就会出现str的长度小了很多在上面的贴子中发出来的方法str的长度却没有减小
我只是给出了几句代码恩
我把全部的贴出来
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);
}
}
好象没什么印象.