iOS中用json接受圖片的二進位流

來源:互聯網
上載者:User

標籤:

  標題可能說的有點混亂,再好好描述一下我遇到的問題:

 

  我負責做一款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接受圖片的二進位流

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.