标题可能说的有点混乱,再好好描述一下我遇到的问题:

  我负责做一款App的iOS版本,服务器和Android版本都开发完了。服务器的图片存的不是路径,而是在数据库中的blob流对象,由于要求所有数据都用json传值,图片服务器端的处理方式是把图片二进制流转化成字符串。服务器和Android都是java开发的,很方便,直接都用jackson封装和解析就OK了,而iOS端说死也不能把这个字符串解析成图片!

  不知道大家看到这能否直接发现问题出在哪里,反正我是被这个问题折磨了将近两天。

  思路 1

  起初我觉得这个问题应该不算问题,很容易搞定,就是把字符串转化成NSData对象,然后用UIImage的initWithData方法。

  NSData* imgData = [imgString dataUsingEncoding:NSUTF8StringEncoding];写完代码,第一感觉用UTF8解析图片流有点怪怪的,果然,图片显示不出来。

  思路 2

  既然UTF8不行,java里默认的字符编码不是ISO-8859-1么,换编码!!不好使!有病乱投医,换成asc2编码,还是显示不出来图片!

  思路 3

  钻牛角尖的后果很严重!开始抱怨,iOS怎么这么坑爹啊,把字符串转成Byte数组怎么这奇葩啊,为啥非得加上个字符编码呢?老子自己写个不用字符编码的解析算法!

  于是就开始写算法,因为json传过来的图片字符串是一个只有英文字母和一些普通的符号的字符串,所以决定遍历字符串的每个字符,把每个字符转换成一个8位的byte。

  哈哈,自己搞除了的Byte数组应该好使吧,岂可修!!还是不好使!!!不过思路总算是正确的了。

  思路 4

  痛定思痛,决心好好想一想,问题到底出在什么地方。别着急,慢慢来,相信数据到底是哪儿来的,问什么在Android上没问题。

  我问服务器端和Android端对接的哥们要了相关的代码,服务器执行完sql用ResultSet直接把blob对象转成byte[],Bean对象"人员"类里的头像属性直接就是byte[]类型的。

  然后他们直接用jackson组件把Person对象转化成json字符串,加密之后直接返回给客户端,安卓端解密后再用相同的一套组件再把json字符串转化成Person对象就搞定了!

  问题是jackson底层到底是怎么转化的啊??

  最终解决方案

  由于时间问题,没详细研究jackson底层代码,只好让服务器端改代码了,把byte数组直接转换成16进制字符串了,虽然效率可能低点,但简单明了。客户端只要解析16进制字符串就行了。有时间研究研究jackson的源码,看看人家怎么这么转换的。

  心得

  回头看看其实问题很好解决,就是有时候太爱钻牛角尖,好好想想问题的来龙去脉,很快就能搞定了!

iOS中用json接收图片的二进制流的更多相关文章

  1. 【转载】C#.NET WebApi返回各种类型(图片/json数据/字符串),.net图片转二进制流或byte

    C#.NET WebApi返回各种类型(图片/json数据/字符串),.net图片转二进制流或byte 转载:http://www.itdos.com/Mvc/20150302/0741255.htm ...

  2. php读取图片成二进制流输出

    header( "Content-type: image/jpeg");$PSize = filesize('1.jpg');$picturedata = fread(fopen( ...

  3. 【转载】C#将图片转换为二进制流调用

    在C#中可以使用MemoryStream类.BinaryFormatter类等来操作图片,将图片读取到二进制数据流中,最终转成二进制数据流进行调用,详细的实现如下方法所示. private byte[ ...

  4. 【转载】C#将图片以二进制流的方式存入数据库

    在C#开发应用程序的过程中,图片一般会存放在文件系统中,当然图片也可以二进制的方式存放到数据库中,不过一般不建议存放在数据库中,因为图片占用的空间还是挺大的,特殊情况下可以考虑将图片存在数据.此文将介 ...

  5. Unity C#图片转换二进制流、字符串互转

    图片转二进制流转换图片互转 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...

  6. 使用C#向Sql Sever中存取网络图片和本地图片(二进制流的形式)

    先是做普通的,存储我们本地的图片,将它转化为二进制流存储到数据库对应的表中. 代码如下: string path = "../../A.jpg"; FileStream fs = ...

  7. [转] js实现对图片的二进制流md5计算

    //计算图片md5 function img_MD5(img_path,callback) { plus.io.resolveLocalFileSystemURL(img_path, function ...

  8. C#.NET WebApi返回各种类型(图片/json数据/字符串),.net图片转二进制流或byte

    using System.IO; /// <summary> /// WebApi返回图片 /// </summary> public HttpResponseMessage  ...

  9. QTP图片验证/图片比较/二进制流对比法

    图片验证主要是文件对比,其中我们可以利用二进制的方法读取图片信息,然后进行对比,达到对比的效果,本例子利用fso对象的文件流的方法实现,代码如下: Public Function CompareFil ...

随机推荐

  1. iOS 后台运行执行代码(例如定位)

  2. React 开发常见报错解决方法

    1. 使用 redux 的异步 action 时浏览器报错: Error: Actions must be plain objects. Use custom middleware for async ...

  3. Bootstrap 栅格系统 理解与总结

    Bootstrap 栅格系统 学习总结 Bootstrap框架是如今最流行的前端框架之一,Bootstrap功能强大,简单易学,很符合实际应用场景. 只是Bootstrap的内容较多,新手往往不能很快 ...

  4. hdu3294 manacher算法

    这道题哇 其实是裸的manacher 无论怎么变 是回文的就是回文 所以 特殊处理一下输出就好了 不过最后的左右端点l,r.l=(p-p[pos]+2)/2-1,r=(p+p[pos]-2)/2-1; ...

  5. SpringMvc基础知识(二) springmvc和mybatis整合

    1 springmvc和mybatis整合 1.1 需求 使用springmvc和mybatis完成商品列表查询. 1.2 整合思路 springmvc+mybaits的系统架构: 第一步:整合dao ...

  6. POJ1080(LCS变形)

    Human Gene Functions Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  7. linux驱动基础系列--linux rtc子系统

    前言 linux驱动子系统太多了,连时钟也搞了个子系统,这导致一般的时钟芯片的驱动也会涉及到至少2个子系统,一个是时钟芯片接口子系统(比如I2c接口的时钟芯片),一个是内核给所有时钟芯片提供的rtc子 ...

  8. springboot 整合springDataJPA

    springboot 整合springDataJPA 〇.搭建springboot环境 一.添加依赖 mysql <!-- mysql驱动 --> <dependency> & ...

  9. mybatis插入值的时候返回对象的主键值

    mapping文件: <insert id="insert" parameterType="com.vimtech.bms.business.riskproject ...

  10. Asp.Net Core 项目实战参考

    Asp.Net Core 项目实战链接 http://www.cnblogs.com/fonour/p/5904530.html