自己在做一个项目时,需要使用socket通信,要和java中bytebuffer转换的属性一样,需要将所有的类型如:int,short,long,string类型转成和java或者c++通信都使用的二进制流格式,要以byte字节流数组形式传递,当时开发时,有点被这么多的要求惊讶了一下,然后找了几天资料都没有清楚从哪里下手,压力比较大,突然想到,那我们iOS都是以nsdata数据流格式传输的,而且都是二进制流格式,正好合适我的需要,于是,我先是建立了socket通信(废话不多说,上代码):
先是建立连接的 .h文件
最后我发现,既然到最后使用的是nsdata数据流,即他本身就是二进制流数据传输,那和我需要的差距不是很大,于是,我打开服务器使用了一个字符串进行传输,发现可以通过编译,并没有任何问题,于是,我直接使用了这个方法,但是,我出现了一个字节序问题,即(端序),苹果使用小端序传输,而其他都是网络端序大端序传输,后来我发现,它提供了相应的整数端序转换:
如 short型使用 :HTONS 转换端序,从小端序转为大端序,HTONL 转化4字节端序,HTONLL转化8字节端序。
废不多说上代码:
近段时间接触的项目中,从后台获取的数据并非是Json/XML格式的,而是最原始的
二进制
流
,也就是我们所说的data格式,这就让人郁闷了,平时接触的json格式,是可以通过的键值来将数据进行一一对应。而用到data,猛一下感觉无从下手。现在来说一下本人的处理方法:
1.定义一个结构体:
struct
int price;
double time;
刚加入新的公司,接触到新公司的代码以后,心中是一篇翻江倒海,不是因为项目代码有多优秀,多牛逼,而是因为这是一个7年的老项目,期间经历过不知多少个程序员的手,项目简直是面目全非,各种重复的第三方库,代码耦合严重,不同时期的代码风格及开发模式完全不一样,造成项目过大,编译花费很多时间。现在的同事们正在想办法优化项目,在使用组件化的发开模式,减少与项目中老代码及第三方重复库的耦合。
因此,一些老的代码和一些已经不怎么更新且非常稳定的第三方库进行
二进制
处理,加快编译速度,同时在未来的开发中能更好进行整合和淘汰
更多移动技术文章请关注本文集:知乎移动平台专栏
随着公司业务规模的增长,
iOS
客户端的代码量也越来越大,编译一次项目的时间也越来越长。减少编译时间成了一个不得不面对的问题。
现有的
二进制
方案如 Carthage、Rome 等都是在本地生成 framework,没法实现「一次编译,处处使用」的目标。
为了实现这个目标,就需要一个人或者一个 CI Jo...
随着公司业务规模的增长,
iOS
客户端的代码量也越来越大,编译一次项目的时间也越来越长。那么减少编译时间成了一个不得不面对的问题;
随着越来越多方便的第三方组件,现在开发App基本十多个第三方依赖以上。没有build cache 或者打正式包的时候,每次基本耗时10分钟以上;
现有的
二进制
方案如 Carthage、Rome 等都是在本地生成 framework,没法实现“一次编译,处处使用”的目标;
主要原因是需要编译大量源文件(大概分为 App 和 Cocoapods 依赖库),所以把可抽离代码编
此文以图片
二进制
流
转为base64显示图片为例
因为ajax不能接受文件
流
,所以使用原生的请求方式,接收后台传过来的
二进制
文件
流
var xhr = new XMLHttpRequest();
xhr.open('GET', '/path/to/image.png');
xhr.responseType = "arraybuffer";
request.onload = functi...
NSDictionary *dicJson=[NSJSONSerialization
JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers
error:nil];
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;