我对Android很陌生,我有一个任务来打开TCP套接字并侦听特定的端口。 客户端应用程序应该向我发送2个图像和一个彼此相关的字符串,因此我们不考虑将每个数据单独发送,而是考虑将所有数据放入json对象并发送此对象。 我的问题是,我如何解析这个JSON到保存2个图像和一个字符串? 所以这个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。
对不起,我不明白你有什么问题。如果你可以写一个套接字,那么为什么阅读会成为一个问题呢?对我来说看起来很基本。之后......你有什么问题从json中提取这三个参数的值? – greenapps
不明白你为什么不能从socket对象读取数据。服务器发送一个json文本。这只是文字。你可以阅读它。您的客户只需从输入流中读取文本。 – greenapps
但无论如何它是一个坏主意,使用base64和json来传输文件。要传输的字节数量至少增加30%。 – greenapps