日期:2014-05-17  浏览次数:21114 次

C#二进制图片转Java的问题

  最近在处理一个图片需求时,碰到了一个小问题。由于图片是通过字节数组从C#传到java的,而C#的byte是没有符号位的,从0到255,java的则有符号位的,从-128~127。这样在从c#传递到java的时候,就会出现字节大小过长的问题。
  在此之间,曾想过用截取或者运算的方法获取,均以失败告终。最后,转念一想,其实对于机器而言,既然C#和java的byte都是8位,而且都是二进制的,那么不管他们的十进制在c#和java里的值是多少,只要他们的8位二进制一样,实际上这两个数字是一致的。
  这样一想,问题就简单多了。为了保障能正确接收C#传过来的字节数组,我用int数组接收。成功接收后,我再把int数组强制转化为byte数组,就大功告成了。虽然强制转化会丢失精度,但是实际上我们也只要int的前8位(也就是从c#接收的byte)就可以了。这样接收后,就成功把将C#生成的图片二进制转化成java的图片二进制了,最后,再将二进制转化成图片就可以了。附上转化为图片较为粗略的代码:
   
    public static String byteToImage(byte[] byte1)
    {
    	String fileName = System.currentTimeMillis()+ ".jpg";
    	try {   
    		File filePic = new File(“E://”+fileName);
    		if(!filePic.getParentFile().isDirectory()){
    			(new File(filePic.getParent())).mkdirs();
    		}	        
    		FileOutputStream fos =new FileOutputStream(filePic);
    		fos.write(byte1);
    		fos.flush();
    		fos.close();

        } catch (IOException e) {   
            e.printStackTrace();   
        }   
        return fileName;
    }