• 接口开发中 遇到的坑——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文件  

  • 相关阅读:
    简易计算器
    方法的声明和使用
    真与假与c#,java中的不同之处
    SD卡添加文件,添加不进去,报 Read-only file system错误
    BitMap画图
    绘制一些基本图形(例如矩形,圆形,椭圆,多边形)
    SufaceView(绘图类)
    CanVas类(绘图类)
    回车键
    [动态规划][LIS+方案数]低价购买
  • 原文地址:https://www.cnblogs.com/Abert33/p/8855043.html
Copyright © 2020-2023  润新知