前提: 公司与其他公司进行接口对接 需要使用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文件