接口开发中 遇到的坑——Java byte与C# byte 数据转换问题

前提: 公司与其他公司进行接口对接 需要使用Byte[]数据流传输数据

原本想法如下:直接IO生成就ok了

  1. using System;  
  2. using System.IO;  
  3. using System.Text;  
  4.   
  5. namespace StreamReader  
  6. {  
  7.     class Program  
  8.     {  
  9.         public static void Main(byte[] buffer)  
  10.         {  
  11.           System.IO.File.WriteAllBytes(@"D:合同文件demo.pdf",buffer);
  12.         }  
  13.     }  
  14. }  

但是  生成的pdf 打不开。。。。。

本着办法总比困难多的想法  以为IO生成可能是有问题,具体问题出现在哪没有考虑就直接上第二种方法

Stream stream = new MemoryStream(buffer);

BinaryReader br = new BinaryReader(stream);
FileStream fs = File.Create(@"D:合同文件demo.pdf");
fs.Write(buffer, 0, buffer.Length);
br.Close();
fs.Close();

结果 也是一首凉凉送自己。。

思前想后也没想出结果 用自己的pdf生成byte[]数据流然后使用以上两种方法均能生成可以打开的pdf 妈蛋。。开始怀疑对方给的数据流是否正确了

向对方要了数据流的原始文件 自己生成了byte[]数据流 前后一对比发现JAVA的数据流里有-8,-9带有‘-’号的数据 c#生成的则没有。。

百度一波 发现JAVA的byte的范围在 [-128,127] 有符号位 在C#中byte的范围在 [0,255] 无符号位

问题发现了 本来是想直接用笨方法解决的 后来继续翻了几个文章发现C#中sbyte的范围和JAVA的范围是一致的  哈哈 

结果就是 http请求回来的数据流用sbyte接收 使用以上两种方法均可生成可正常使用的pdf文件  

原文地址:https://www.cnblogs.com/Abert33/p/8855043.html