Как скачать файл в браузере - PullRequest
0 голосов
/ 14 мая 2011

Если я сохраняю 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();

Что не так?

возможно это закодировано

Ответы [ 3 ]

6 голосов
/ 14 мая 2011

Вы рассматриваете двоичный файл как текстовый файл, используя 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();

Смотри также:

0 голосов
/ 15 мая 2011

Не читать строку для двоичного содержимого.Не сработает.

А вот мое обязательное объявление о бесплатной альтернативе с открытым исходным кодом для самостоятельной работы с HTTPClient или URLConnection.

Resty r = new Resty();
File f = r.bytes(url).save(new File("test123.mp3"));

Resty доступен здесь http://beders.github.com/Resty (ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я поддерживаю этот небольшой побочный проект)

0 голосов
/ 14 мая 2011

Я думаю, что ваша проблема заключается в том, что вы пишете свой файл как символьный, а не двоичный файл.Попробуйте прочитать это 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...