文件下载问题

sxZeng 2011-09-15 10:46:09
自己用tomcat搭了个服务器,上边有一些MP3文件,然后在android的应用程序中下载这些文件
可恶的是,下载下来的文件竟然会比原文件要大,而且播放的时候有杂音,且只能够播放一小会,就抛异常了
这是怎么回事呢?
...全文
168 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxZeng 2011-09-18
  • 打赏
  • 举报
回复
对 就是单位读取的字节量
jeky_zhang2013 2011-09-16
  • 打赏
  • 举报
回复
我想问下,byte buffer[]=new byte[1024] 与byte buffer[]=new byte[4*1024];
的差别,这两种方式定义了单位读的字节取么,前者是1K,后者是4K 么?谢谢
sxZeng 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 guoying_ 的回复:]
你把这个write2SDFromInput方法修改一下

Java code


public byte[] readStream(InputStream input) throws Exception {
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffe……
[/Quote]

我懂了 其实 就是:output.write(buffer);和output.write(buffer,0,temp);的区别
sxZeng 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 guoying_ 的回复:]
你把这个write2SDFromInput方法修改一下

Java code


public byte[] readStream(InputStream input) throws Exception {
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffe……
[/Quote]
这样子还是有问题 因为每一次都是把输入流的内容先全部加载到内存 然后才写到sdcard
当你同时下载多个文件的时候 就会出现09-16 14:11:24.469: ERROR/AndroidRuntime(315): java.lang.OutOfMemoryError
的异常 即内存不够用了
sxZeng 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 guoying_ 的回复:]
File file = new File("/home/lgh/1233.mp3");
file.createNewFile();
这里的文件目录你自己修改下
[/Quote]
果然给力 谢谢啦 可我还是不知道这是为什么?
为何这样子读取:
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = input.read(buffer)) != -1) {
output.write(buffer, 0, len);
}
input.close();
output.close();
return output.toByteArray();
就可以了
而:
byte buffer[]=new byte[4*1024];
while((input.read(buffer))!=-1){
output.write(buffer);
}

却不行
sxZeng 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ajq1989 的回复:]
= =
查看log
[/Quote]
09-16 01:29:54.347: DEBUG/dalvikvm(282): GC_FOR_MALLOC freed 5009 objects / 325248 bytes in 87ms
09-16 01:30:56.467: DEBUG/SntpClient(59): request time failed: java.net.SocketException: Address family not supported by protocol
sxZeng 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 guoying_ 的回复:]
应该是你下载时候流用的有问题,使下载的数据偏大,还要你贴出来代码看看!
[/Quote]主要的下载代码为这个函数
public File write2SDFromInput(String path,String fileName,InputStream input)
{
File file=null;
OutputStream output=null;
try{
this.creatSDDir(path);
file=this.creatSDFile(path+fileName);
output=new FileOutputStream(file);
byte buffer[]=new byte[4*1024];
while((input.read(buffer))!=-1){
output.write(buffer);
}

output.flush();
}
catch(Exception e){
e.printStackTrace();
}

finally{
try{
output.close();
}
catch(Exception e){
e.printStackTrace();
}
}

return file;
}
lizhengjun2010 2011-09-16
  • 打赏
  • 举报
回复
数据读取与存储有问题!
guoying_ 2011-09-16
  • 打赏
  • 举报
回复
File file = new File("/home/lgh/1233.mp3");
file.createNewFile();
这里的文件目录你自己修改下
guoying_ 2011-09-16
  • 打赏
  • 举报
回复
你把这个write2SDFromInput方法修改一下

public byte[] readStream(InputStream input) throws Exception {
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = input.read(buffer)) != -1) {
output.write(buffer, 0, len);
}
input.close();
output.close();
return output.toByteArray();
}
public void getMp3()throws Exception{

String urlPath = "http://www.im.ntu.edu.tw/~b97006/01.mp3";
URL url = new URL(urlPath);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();//返回一个连接对象
conn.setRequestMethod("GET");//设置请求方式
conn.setConnectTimeout(6*1000);//设置连接超时,这里可以不用设置,但是在android应用中应该设置超时时间
if (conn.getResponseCode()==200) {
InputStream input = conn.getInputStream();
byte[] data = readStream(input);
File file = new File("/home/lgh/1233.mp3");
file.createNewFile();
FileOutputStream output = new FileOutputStream(file);
output.write(data);
output.close();
}
}

试试看,可以的!
guoying_ 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sxzeng 的回复:]

引用 2 楼 guoying_ 的回复:
应该是你下载时候流用的有问题,使下载的数据偏大,还要你贴出来代码看看!
主要的下载代码为这个函数
public File write2SDFromInput(String path,String fileName,InputStream input)
{
File file=null;
OutputStream output=null;
……
[/Quote]
你这个是mars老师视频里面的代码吧
guoying_ 2011-09-15
  • 打赏
  • 举报
回复
应该是你下载时候流用的有问题,使下载的数据偏大,还要你贴出来代码看看!
ajq1989 2011-09-15
  • 打赏
  • 举报
回复
= =
查看log

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧