如何将图片二进制--字符串--二进制流?

需求是这样的:我要把一个图片用webservice发布出去,流程 图片---》二进制---》字符串---》调用webserivce接口---》字符串---》二进制---》图片。不能直接发布二进制接口,因为客户端不支持。

现在遇到的问题是二进制 转字符串 再转成二进制后就和原来的不一样了。

我写的代码[code="java"]
File file=new File("d:\test.jpg");
InputStream input =new FileInputStream(file);
byte[] temp = new byte[input.available()];

tem.read(temp);
tem.close();
String outstr = new String(temp);
byte[] outbyte = outstr.getBytes();
File outfile=new File("d:\testout.jpg");
FileOutputStream fos = new FileOutputStream(outfile);
fos.write(outbyte);
fos.close();
[/code]

这样转化后[code="java"]
String outstr = new String(temp);
byte[] outbyte = outstr.getBytes();
[/code]
temp 和 outbyte就不一样了,试了各种编码还是不行
请问怎么解决
ps:如果是字符串来回转都没事,图片不行

[code="java"]
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
File inFile = new File("d:\1.gif");
File outFile = new File("d:\2.gif");
FileInputStream fis = new FileInputStream(inFile);
byte [] bytes=new byte[fis.available()];
fis.read(bytes);
String str = new String(bytes,"iso8859-1");
FileOutputStream fos = new FileOutputStream(outFile);
fos.write(str.getBytes("iso8859-1"));
fos.close();
fis.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

[/code]

这段代码可以.注意要使用iso8859-1编码格式,不然有可能造成字节丢失.
发送方:String str = new String(bytes,"iso8859-1");
接受方:str.getBytes("iso8859-1")

怎么会转换过来就变了呢,是不是你读数据读反了。不要文件流,用字节流在用字符流包装看看。

用iso8859-1包装成字符串会使数据量增加一倍。
不知道你为什么要把图片数据转换成字符串...

不过你可以考虑 每两个字节合成一个char,然后把char通过StringBuilder组合成String.这样空间时间都没有浪费。
下面是每两个byte组合成一个char的算法。你从inputStream中是可以得到byte的。
[code="java"]
byte a = 0,b = 0;
char c = (char)((a<<8)|b);
[/code]