ホームページ  >  に質問  >  本文

objective-c - iOS dictionary字典如何转成bytes[]数组,急!

public static byte[] ObjectToByte(Object obj) {
    byte[] bytes = null;
    try {
        // object to bytearray
        ByteArrayOutputStream bo = new ByteArrayOutputStream();
        ObjectOutputStream oo = new ObjectOutputStream(bo);
        oo.writeObject(obj);

        bytes = bo.toByteArray();

        bo.close();
        oo.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return (bytes);

}

public Object ByteToObject(byte[] bytes){
    Object obj = null;
    try {
    ByteArrayInputStream bi = new ByteArrayInputStream(bytes);
    ObjectInputStream oi = new ObjectInputStream(bi);

    obj = oi.readObject();

    bi.close();
    oi.close();
    }
    catch(Exception e) {
        e.printStackTrace();
    }
    return obj;
}

以上为安卓将map转成字节流代码 字节流反转对象的代码,现也需将dictionary转成流形式,应该怎么做才能等效

服务端解析时报invalid stream header

如下是上传数据代码
NSURL *url = [NSURL URLWithString:UPLOADIMAGEURL];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
// 设置请求体
NSMutableData *body = [NSMutableData data];
NSString *fileName = [params objectForKey:@"FR_FILE_NAME"];
[body appendData:[fileName dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"|" dataUsingEncoding:NSUTF8StringEncoding]];

// NSData *data = [CommonUtils returnDataWithObject:params];
//
// NSData *data= [NSJSONSerialization dataWithJSONObject:params options:NSJSONWritingPrettyPrinted error:nil];
// NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
// NSString *error;
// NSData *data = [NSPropertyListSerialization dataFromPropertyList:params format:NSPropertyListXMLFormat_v1_0 errorDescription:&error];

NSString *dictFilePath = [NSString stringWithFormat:@"%@/%@",KOriginalPhotoImagePath,@"dict"];
[params writeToFile:dictFilePath atomically:YES];
[body appendData:[@"iOS" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"&" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:imageData];
request.HTTPBody = body;
// 声明这个POST请求是个文件上传
[request setValue:@"multipart/form-data" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"Keep-Alive" forHTTPHeaderField:@"Connection"];

// 发送请求
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
    if (connectionError) {
        NSLog(@"%@",connectionError);
        NSLog(@"上传失败");
    } else {
        NSLog(@"上传成功");
    }
}];

| &应该穿字典对象转成的字节流,可我试过很多种方法,后台都无法将我发的字节流转成对象,这是不同开发平台序列化方式不同的缘故还是什么?

PHP中文网PHP中文网2741日前769

全員に返信(4)返信します

  • 高洛峰

    高洛峰2017-04-18 09:48:27

    まず NSDictionary を NSData に変換し、次に NSData の bytes メソッドを使用して byte[] 配列のポインターを取得します

    返事
    0
  • 阿神

    阿神2017-04-18 09:48:27

    結局のところ、Android バージョンは JSON に変換する必要があります。プラットフォームごとに辞書の実装方法が異なります。

    返事
    0
  • PHP中文网

    PHP中文网2017-04-18 09:48:27

    ObjC のバイナリは NSData です:

    リーリー

    HTTP アップロードの場合は、このデータを HTTP 本文に直接入力するだけです。

    リーリー

    AFNetworking の場合は、NSData をパラメータに渡すだけです:

    リーリー

    --- 更新:

    次のコードに基づいて変更してみてください:

    リーリー

    返事
    0
  • 高洛峰

    高洛峰2017-04-18 09:48:27

    あなたが私にくれたコードを見ると、Android バージョンは JAVA のシリアル化メカニズムを使用しています。結局のところ、プラットフォームが異なり、実装方法も異なります。

    返事
    0
  • キャンセル返事