如果我通过浏览器保存mp3文件,第三方库通常与他合作,如果我通过HTTP摇摆自己,那么由于没有正确编码,第三方库无法工作。
我使用此代码
HttpGet first = new HttpGet(url);
first.addHeader("Content-Type", "audio/mpeg");
HttpResponse response = httpclient.execute(first, localContext);
InputStream instream = response.getEntity().getContent();
StringBuilder sb = new StringBuilder();
BufferedReader r = new BufferedReader(new InputStreamReader(instream));
for (String line = r.readLine(); line != null; line = r.readLine()) {
sb.append(line);
}
instream.close();
String textFile = sb.toString();
BufferedWriter out = new BufferedWriter(new FileWriter("test123.mp3"));
out.write(textFile);
out.close();
怎么了?
也许是编码
答案 0 :(得分:6)
您使用Reader
/ Writer
代替InputStream
/ OutputStream
将二进制文件视为文本文件。 BufferedReader#readLine()
吃CRLF字节。
直接将InputStream
直接写入OutputStream
,而无需将字节按摩到字符并返回并删除CRLF字节。您也不必再担心字符编码了。
InputStream input = response.getEntity().getContent();
OutputStream output = new FileOutputStream("test123.mp3");
byte[] buffer = new byte[1024];
for (int length = 0; (length = input.read(buffer)) > -1;) {
output.write(buffer, 0, length);
}
output.close();
input.close();
答案 1 :(得分:0)
我认为您的问题依赖于您将文件编写为Character文件而不是二进制文件。请尝试阅读此http://www.java2s.com/Code/Java/File-Input-Output/TheuseofDataOutputStreamandDataInputStream.htm和此http://download.oracle.com/javase/1.4.2/docs/api/java/io/OutputStream.html
答案 2 :(得分:0)
不要读取二进制内容的字符串。不行。
这是我自己的免费开源替代品的强制性广告,可以自己搞乱HTTPClient或URLConnection。
Resty r = new Resty();
File f = r.bytes(url).save(new File("test123.mp3"));
Resty可在此处http://beders.github.com/Resty (免责声明:我是这个小方案项目的维护者)