Coder Social home page Coder Social logo

dutil's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dutil's Issues

DownloadManger 单例问题

DBuilder 构建出的 DownloadManger 为单例 .

多线程时对DownloadManger进行多次 init 操作,
DownloadManager.downloadData为非安全对象.
是否可使用 DownloadManger.addDonloadTask(DownloadData downloadData) 形式对下载数据的对象进行保存? 亦或者通过 url 进行 map 映射?

同时 context 是否可以使用 context.getApplicationContext 避免Activity 内存泄漏?

采用链式调用一次最多只能下载5张图片,我是在adapter里面调用的,想一次下载更多怎么改

@OverRide
public void bindView(BaseViewHolder holder, final SavePhotoEntity obj, final int position) {
Button select = holder.getView(R.id.bt_select);
final TextView state = holder.getView(R.id.tv_state);
final TextView savePath = holder.getView(R.id.tv_name);
Log.e("liluo","地址:"+obj.getUrl());
DUtil.init(mContext)
.url(obj.getUrl())
.path(PhotoSave.getSavePath1(mContext))
.name(UUID.randomUUID().toString() + obj.getUrl().substring(
obj.getUrl().lastIndexOf(".")))
.childTaskCount(1)
.build()
.start(new DownloadCallback() {
@OverRide
public void onStart(long l, long l1, float v) {
state.setText("开始下载");
}

                @Override
                public void onProgress(long l, long l1, float v) {
                    state.setText("下载中");
                }

关于用Servlet输出流的文件下载出错

实际情况不可能把服务器上的文件目录全部映射到服务器,所以我在tomcat服务器上映射一个下载文件的servlet ,用流读取文件,然后用response的输出给客户端。这种方式浏览器,下载工具都能正常下载。但是使用Dutil下载到快结束时总是出错,下载不成功。
我服务端是这样写的:
File tagetFile = new File(filePath);
if (tagetFile.exists()) {
try {
resp.reset();
resp.setContentType("application/x-download");
resp.setHeader("Last-Modified",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tagetFile.lastModified()));
resp.setCharacterEncoding("utf-8");
resp.setHeader("Content-Disposition", "attachment; filename=" + fileName + "");
resp.setHeader("Content-Length", tagetFile.length() + "");
/* 如果文件长度大于0 /
if (tagetFile.length() != 0) {
/
创建输入流 /
InputStream inStream = new FileInputStream(tagetFile);
byte[] buf = new byte[4096];
/
创建输出流 */
ServletOutputStream servletOS = resp.getOutputStream();
int readLength;
while (((readLength = inStream.read(buf)) != -1)) {
servletOS.write(buf, 0, readLength);
}
inStream.close();
servletOS.flush();
servletOS.close();
}
} catch (Exception e) {
System.out.println("FileDownLoad 错误");
}
}

DownloadManager的单例问题和context可能带来的memory leak

有几个问题想请教下:

  1. 为什么使用Dutil 去init一个DBuilder,Dutil的init(Context context)方法不直接放在Dbuilder里面有理由吗?
  2. DownloadManager为什么使用volatile加类锁?Context 被静态对象持有是不是会出现memory leak?
  • private volatile static DownloadManger downloadManager;
  • public static DownloadManger getInstance(Context context) {
  •     if (downloadManager == null) {
    
  •         synchronized (DownloadManger.class) {
    
  •             if (downloadManager == null) {
    
  •                 downloadManager = new DownloadManger(context);
    
  •             }
    
  •         }
    
  •     }
    
  •     return downloadManager;
    
  • }
    

-}

包名规范修改

dutil模块里的package com.othershe.dutil.Utils包名大写了,虽然可以找到,但是AS还是会划条难看的红线。可以改一下 ,我说的是AndroidStudio工程dutil模块里的包名,真实文件目录里的包名是正确的(小写的)。

判断服务器文件是否修改的方法不是很理解啊

你好 这段代码注释写着判断服务器文件是否修改
/**
* 服务器文件是否已更改
*
* @param response
* @return
*/
public static boolean isNotServerFileChanged(Response response) {
return response.code() == 206;
}
状态码206代表,客户端通过发送范围请求头Range抓取到了资源的部分数据。这个是如何判断服务器文件是否修改的?我的理解应该是比较两次下载时获取到的Last-Modified来判断文件是否修改吧。

关于ftp文件下载

请问是否支持ftp文件下载,我在使用的时候报错
java.lang.IllegalArgumentException: unexpected url: ftp://10.19.67.79:21/切片/nb20170824.vtpk

......

看了下你的源码,写的不错哦,逻辑清晰,易于使用。而且没有用到RxJava和Retrofit这二货,
下次建议把JsonCallback也给加上,

关于FileTask里的几个问题

楼主的代码整体思路很清晰,关键地方也给出了注释,但是有个问题想请楼主解答下:
saveRangeFile() 中,采用多个request来分段请求response,tempChildTaskCount的含义和后面的这个while循环能给出更详细的解答吗?
......
while (tempChildTaskCount < childTaskCount) {
//由于每个文件采用多个异步操作进行,发起多个异步操作后该线程已经结束,但对应文件并未下载完成,
//则会出现线程池中同时下载的文件数量超过设定的核心线程数,所以考虑只有当前线程的所有异步任务结束后,
//才能使结束当前线程。
}
}

temp文件问题

下载时 总会有一两个文件 的临时文件未转过来 下载就完了 temp文件大小为48b

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.