{"id":19237523,"url":"https://github.com/core-lib/network","last_synced_at":"2025-10-04T10:50:30.503Z","repository":{"id":107633138,"uuid":"118091068","full_name":"core-lib/network","owner":"core-lib","description":"Java HTTP/HTTPS Downloader","archived":false,"fork":false,"pushed_at":"2018-01-26T02:21:42.000Z","size":76,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-23T13:51:21.573Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/core-lib.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-01-19T07:15:46.000Z","updated_at":"2020-02-15T04:37:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"1e72016d-6076-4caf-a426-de3a3e587f16","html_url":"https://github.com/core-lib/network","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/core-lib/network","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/core-lib%2Fnetwork","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/core-lib%2Fnetwork/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/core-lib%2Fnetwork/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/core-lib%2Fnetwork/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/core-lib","download_url":"https://codeload.github.com/core-lib/network/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/core-lib%2Fnetwork/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278302557,"owners_count":25964520,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T16:27:07.232Z","updated_at":"2025-10-04T10:50:30.478Z","avatar_url":"https://github.com/core-lib.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"Network\n=======\n\nJava HTTP / HTTPS Downloader Implementation\n\u003e ## Installation\n```\n\u003crepositories\u003e\n    ...\n    \u003crepository\u003e\n        \u003cid\u003ejitpack.io\u003c/id\u003e\n        \u003curl\u003ehttps://jitpack.io\u003c/url\u003e\n    \u003c/repository\u003e\n    ...\n\u003crepositories\u003e\n\n\u003cdependencies\u003e\n    ...\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.github.core-lib\u003c/groupId\u003e\n        \u003cartifactId\u003enetwork\u003c/artifactId\u003e\n        \u003cversion\u003ev1.3.0\u003c/version\u003e\n    \u003c/dependency\u003e\n    ...\n\u003c/dependencies\u003e\n```\n\u003e ## Usages\n* ### Block Mode\n```\n@Test\npublic void testBlock() throws Exception {\n    Network.download(URL)\n            .block()\n            .to(File.createTempFile(\"network\", \".tmp\"));\n}\n```\n* ### Async Mode\n```\n@Test\npublic void testAsynchronous() throws Exception {\n    final Object lock = new Object();\n    Network.download(URL)\n            .asynchronous()\n            .callback(new CallbackAdapter() {\n                @Override\n                public void complete(AsynchronousDownloader\u003c?\u003e downloader, boolean success, Exception exception) {\n                    synchronized (lock) {\n                        lock.notify();\n                    }\n                }\n            })\n            .to(File.createTempFile(\"network\", \".tmp\"));\n    synchronized (lock) {\n        lock.wait();\n    }\n}\n```\n* ### Resumable Mode\n```\n@Test\npublic void testResumable() throws Exception {\n    final Object lock = new Object();\n    Network.download(URL)\n            .resumable(3) // max retry 3 times if error occur while downloading\n            .callback(new CallbackAdapter() {\n                @Override\n                public void complete(AsynchronousDownloader\u003c?\u003e downloader, boolean success, Exception exception) {\n                    synchronized (lock) {\n                        lock.notify();\n                    }\n                }\n            })\n            .to(File.createTempFile(\"network\", \".tmp\"));\n    synchronized (lock) {\n        lock.wait();\n    }\n}\n```\n* ### Concurrent Mode\n```\n@Test\npublic void testConcurrent() throws Exception {\n    final Object lock = new Object();\n    Network.download(URL)\n            .concurrent(3) // use 3 threads to download a resource in same time, but the server must supports it\n            .times(3) // every thread max retry 3 times if error occur while downloading\n            .callback(new CallbackAdapter() {\n                @Override\n                public void complete(AsynchronousDownloader\u003c?\u003e downloader, boolean success, Exception exception) {\n                    synchronized (lock) {\n                        lock.notify();\n                    }\n                }\n            })\n            .to(File.createTempFile(\"network\", \".tmp\"));\n    synchronized (lock) {\n        lock.wait();\n    }\n}\n```\n\u003e ## Download progress listening\n```\n@Test\npublic void testListen() throws Exception {\n    final Object lock = new Object();\n    Network.download(URL)\n            .asynchronous()\n            .listener(new ListenerAdapter() {\n                @Override\n                public void start(Downloader\u003c?\u003e downloader, long total) {\n                    System.out.println(\"download started and resource size is \" + total + \" bytes\");\n                }\n\n                @Override\n                public void progress(Downloader\u003c?\u003e downloader, long total, long downloaded) {\n                    System.out.println(\"downloading \" + downloaded + \" / \" + total);\n                }\n\n                @Override\n                public void finish(Downloader\u003c?\u003e downloader, long total) {\n                    System.out.println(\"download finished\");\n                }\n            })\n            .callback(new CallbackAdapter() {\n                @Override\n                public void complete(AsynchronousDownloader\u003c?\u003e downloader, boolean success, Exception exception) {\n                    synchronized (lock) {\n                        lock.notify();\n                    }\n                }\n            })\n            .to(File.createTempFile(\"network\", \".tmp\"));\n    synchronized (lock) {\n        lock.wait();\n    }\n}\n```\n\u003e ## Download to OutputStream / Output\n```\n@Test\npublic void testToOutputStream() throws Exception {\n    final ByteArrayOutputStream out = new ByteArrayOutputStream();\n    Network.download(URL)\n            .block()\n            .to(out);\n}\n\n@Test\npublic void testToOutput() throws Exception {\n    final OutputStream out = new FileOutputStream(File.createTempFile(\"network\", \".tmp\"));\n    final DataOutput output = new DataOutputStream(out);\n    Network.download(URL)\n            .block()\n            .to(output);\n}\n```\n\u003e ## Specify download thread pool\n```\n@Test\npublic void testSpecifyDefaultThreadPool() throws Exception {\n    final ExecutorService executor = Executors.newFixedThreadPool(12);\n    Network.setDefaultExecutor(executor);\n}\n\n@Test\npublic void testSpecifyCustomThreadPool() throws Exception {\n    final ExecutorService executor = Executors.newFixedThreadPool(12);\n    final Object lock = new Object();\n    Network.download(URL)\n            .asynchronous(executor)\n            .callback(new CallbackAdapter() {\n                @Override\n                public void complete(AsynchronousDownloader\u003c?\u003e downloader, boolean success, Exception exception) {\n                    synchronized (lock) {\n                        lock.notify();\n                    }\n                }\n            })\n            .to(File.createTempFile(\"network\", \".tmp\"));\n    synchronized (lock) {\n        lock.wait();\n    }\n}\n```\n\n\u003e ## Lambda\n```\nprivate synchronized void lock() throws InterruptedException {\n    this.wait();\n}\n\nprivate synchronized void open() {\n    this.notify();\n}\n\n@Test\npublic void testLambda() throws Exception {\n    Network.download(URL)\n            .asynchronous()\n            .start((downloader, total) -\u003e System.out.println(\"download started and size is \" + total + \" bytes\"))\n            .progress((downloader, total, downloaded) -\u003e System.out.println(downloaded + \" / \" + total))\n            .finish((downloader, total) -\u003e System.out.println(\"download finished\"))\n            .success(downloader -\u003e System.out.println(\"download success\"))\n            .failure((downloader, exception) -\u003e exception.printStackTrace())\n            .complete((downloader, success, exception) -\u003e open())\n            .to(File.createTempFile(\"network\", \".tmp\"));\n    lock();\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcore-lib%2Fnetwork","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcore-lib%2Fnetwork","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcore-lib%2Fnetwork/lists"}