Java HTTP / HTTPS Downloader Implementation
<repositories>
...
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
...
<repositories>
<dependencies>
...
<dependency>
<groupId>com.github.core-lib</groupId>
<artifactId>network</artifactId>
<version>v1.3.0</version>
</dependency>
...
</dependencies>
@Test
public void testBlock() throws Exception {
Network.download(URL)
.block()
.to(File.createTempFile("network", ".tmp"));
}
@Test
public void testAsynchronous() throws Exception {
final Object lock = new Object();
Network.download(URL)
.asynchronous()
.callback(new CallbackAdapter() {
@Override
public void complete(AsynchronousDownloader<?> downloader, boolean success, Exception exception) {
synchronized (lock) {
lock.notify();
}
}
})
.to(File.createTempFile("network", ".tmp"));
synchronized (lock) {
lock.wait();
}
}
@Test
public void testResumable() throws Exception {
final Object lock = new Object();
Network.download(URL)
.resumable(3) // max retry 3 times if error occur while downloading
.callback(new CallbackAdapter() {
@Override
public void complete(AsynchronousDownloader<?> downloader, boolean success, Exception exception) {
synchronized (lock) {
lock.notify();
}
}
})
.to(File.createTempFile("network", ".tmp"));
synchronized (lock) {
lock.wait();
}
}
@Test
public void testConcurrent() throws Exception {
final Object lock = new Object();
Network.download(URL)
.concurrent(3) // use 3 threads to download a resource in same time, but the server must supports it
.times(3) // every thread max retry 3 times if error occur while downloading
.callback(new CallbackAdapter() {
@Override
public void complete(AsynchronousDownloader<?> downloader, boolean success, Exception exception) {
synchronized (lock) {
lock.notify();
}
}
})
.to(File.createTempFile("network", ".tmp"));
synchronized (lock) {
lock.wait();
}
}
@Test
public void testListen() throws Exception {
final Object lock = new Object();
Network.download(URL)
.asynchronous()
.listener(new ListenerAdapter() {
@Override
public void start(Downloader<?> downloader, long total) {
System.out.println("download started and resource size is " + total + " bytes");
}
@Override
public void progress(Downloader<?> downloader, long total, long downloaded) {
System.out.println("downloading " + downloaded + " / " + total);
}
@Override
public void finish(Downloader<?> downloader, long total) {
System.out.println("download finished");
}
})
.callback(new CallbackAdapter() {
@Override
public void complete(AsynchronousDownloader<?> downloader, boolean success, Exception exception) {
synchronized (lock) {
lock.notify();
}
}
})
.to(File.createTempFile("network", ".tmp"));
synchronized (lock) {
lock.wait();
}
}
@Test
public void testToOutputStream() throws Exception {
final ByteArrayOutputStream out = new ByteArrayOutputStream();
Network.download(URL)
.block()
.to(out);
}
@Test
public void testToOutput() throws Exception {
final OutputStream out = new FileOutputStream(File.createTempFile("network", ".tmp"));
final DataOutput output = new DataOutputStream(out);
Network.download(URL)
.block()
.to(output);
}
@Test
public void testSpecifyDefaultThreadPool() throws Exception {
final ExecutorService executor = Executors.newFixedThreadPool(12);
Network.setDefaultExecutor(executor);
}
@Test
public void testSpecifyCustomThreadPool() throws Exception {
final ExecutorService executor = Executors.newFixedThreadPool(12);
final Object lock = new Object();
Network.download(URL)
.asynchronous(executor)
.callback(new CallbackAdapter() {
@Override
public void complete(AsynchronousDownloader<?> downloader, boolean success, Exception exception) {
synchronized (lock) {
lock.notify();
}
}
})
.to(File.createTempFile("network", ".tmp"));
synchronized (lock) {
lock.wait();
}
}
private synchronized void lock() throws InterruptedException {
this.wait();
}
private synchronized void open() {
this.notify();
}
@Test
public void testLambda() throws Exception {
Network.download(URL)
.asynchronous()
.start((downloader, total) -> System.out.println("download started and size is " + total + " bytes"))
.progress((downloader, total, downloaded) -> System.out.println(downloaded + " / " + total))
.finish((downloader, total) -> System.out.println("download finished"))
.success(downloader -> System.out.println("download success"))
.failure((downloader, exception) -> exception.printStackTrace())
.complete((downloader, success, exception) -> open())
.to(File.createTempFile("network", ".tmp"));
lock();
}