私はAndroidには新しく、TCPソケットを開いて特定のポートを聴くタスクがあります。 クライアントアプリケーションは2つの画像とお互いに関連する文字列を送信することになっているので、各データを単独で送信する代わりに、すべてのデータをjsonオブジェクトに入れてこのオブジェクトを送信することを考えました。 私の質問は、どのように私は2つの画像と文字列を保存するこのjsonを解析するのですか? したがって、このJSONは、このようにすることになっている:Android - ソケット経由で複雑なオブジェクトを操作する方法
data
{
FileName: "some string",
Image1: "Image encoded with encode base64",
Image2: "Image encoded with encode base64"
}
私はここにAsyncTaskを使用しています、私はソケットのデータを取得するコードです:
public class DataRecord
{
String Image1;
String Image2;
String FileName;
}
protected DataRecord doInBackground(Socket... sockets) {
DataRecord dataRecord = null;
if (isExternalStorageWritable() && sockets.length > 0) {
Socket socket = sockets[0];
dataRecord = socket.getOutputStream(); // how to extract the data from the socket into this object ???
File file = new File(Environment.getExternalStorageDirectory(), dataRecord.FileName);
byte[] bytes = new byte[(int) file.length()];
BufferedInputStream inputStream;
try {
inputStream = new BufferedInputStream(new FileInputStream(file));
inputStream.read(bytes, 0, bytes.length);
OutputStream outputStream = dataRecord.Image1;
outputStream.write(bytes, 0, bytes.length);
outputStream.flush();
socket.close();
}
catch (Exception e) { }
finally {
try {
socket.close();
} catch (IOException e) { }
}
}
return dataRecord;
}
そして、私はからそれを取得する必要がありますソケットオブジェクトを取得し、そこからオブジェクトを抽出して2つのイメージをSDカードに保存し、UIに文字列を抽出します。
ご迷惑をおかけして申し訳ございません。ソケットに書き込むことができれば、読書は問題になるのですか?私にとっては非常に初歩的ですね。その後、...あなたは、これらの3つのパラメータの値をjsonから抽出するのにどのような問題がありますか? – greenapps
ソケットオブジェクトから読み取ることができない理由を理解していません。サーバーはjsonテキストを送信します。それは単なるテキストです。あなたはそれを読むことができます。あなたのクライアントは、そのテキストを入力ストリームから読みとるだけです。 – greenapps
しかし、何とかbase64とjsonを使ってファイルを転送するのは悪い考えです。転送されるバイト数は少なくとも30%増加します。 – greenapps