接口開發中 遇到的坑——Java byte與C# byte 數據轉換問題
阿新 • • 發佈:2018-04-16
pan 數據 byte[] 文件 成就 開發 bytes 合同 ()
前提: 公司與其他公司進行接口對接 需要使用Byte[]數據流傳輸數據
原本想法如下:直接IO生成就ok了
- using System;
- using System.IO;
- using System.Text;
- namespace StreamReader
- {
- class Program
- {
- public static void Main(byte[] buffer)
- {
- System.IO.File.WriteAllBytes(@"D:\合同文件demo.pdf",buffer);
- }
- }
- }
但是 生成的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 數據轉換問題