1. 程式人生 > >接口開發中 遇到的坑——Java byte與C# byte 數據轉換問題

接口開發中 遇到的坑——Java byte與C# byte 數據轉換問題

pan 數據 byte[] 文件 成就 開發 bytes 合同 ()

前提: 公司與其他公司進行接口對接 需要使用Byte[]數據流傳輸數據

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

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

但是 生成的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文件

接口開發中 遇到的坑——Java byte與C# byte 數據轉換問題