2
我正在制作一个Web服务,将图像文件传输到客户端。对于客户端,我使用Apache HttpClient
API,因为我在开始在android上编码之前正在测试服务。奇怪的JAX-RS行为
正如你可以看到,有一半(左右)的显示像素都失去了转移,但我不知道这是否是因为一些转移盗贼或者我解析答案错误(可能是后者)。我使用SAX进行解析,它收到XML格式的InputStream
。
XML格式是这样的:
<Image>
<data>some Base64 encoded bytes</data>
<name>image name</name>
</Image>
这里是Web服务客户端代码:
private static void download() {
try {
System.out.println("Downloading file...");
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(SERVICE_URL + "download/me");
HttpResponse response = client.execute(request);
if (response.getStatusLine().getStatusCode() != 200) {
System.out.println("Error: HTTP error code: "
+ response.getStatusLine().getStatusCode());
}
InputStream xml = response.getEntity().getContent();
Image i = parseDownload(xml);
System.out.println(i);
client.getConnectionManager().shutdown();
FileOutputStream fos = new FileOutputStream(
new File("D:/newMe.jpg"));
fos.write(i.getData());
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
这里是我的解析代码:
private static Image parseDownload(InputStream xml) {
final Image i = new Image();
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser parser = spf.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
private boolean name = false;
private boolean data = false;
@Override
public void startElement(String uri, String localName,
String qName, Attributes attributes)
throws SAXException {
if (qName.equals("name"))
name = true;
if (qName.equals("data"))
data = true;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if (name) {
i.setName(new String(ch, start, length));
name = false;
}
if (data) {
String data = new String(ch, start, length);
i.setData(Base64.decodeBase64(data));
this.data = false;
}
}
};
Reader reader = new InputStreamReader(xml);
InputSource is = new InputSource(reader);
is.setEncoding("UTF-8");
parser.parse(is, handler);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return i;
}
的任何想法我做错了?
谢谢,就是这样... –