牙叔教程 简单易懂

文件太大, 直接无响应

即使我是小米11, 我有12G的内存, 也是直接无响应了,
猜测系统不允许一下子占用这么大的内存,
或者
autojs无法申请这么大的内存

复现问题

1. 创建一个1G的大文件

导入java类

importClass(java.io.File);
importClass(java.io.FileOutputStream);
importClass(java.io.IOException);
importClass(java.nio.ByteBuffer);
importClass(java.nio.channels.FileChannel);

创建文件输出流

let file = new File(targetFile);
let fos = new FileOutputStream(file);

获取通道

let fileChannel = fos.getChannel();

分配新的字节缓冲区

let buffer = ByteBuffer.allocate(batchSize);

把通道里面的数据,读出来,放缓冲区里面

fileChannel.write(buffer);

关闭文件输出流

fos.close();
2. 创建服务端, 用于下载文件

导入nodejs模块

"nodejs";
const http = require("http");
const url = require("url");
const fs = require("fs");

监听8000端口的请求, 只要收到请求, 就读取流并传给响应

const server = http.createServer((req, res) => {const { pathname } = url.parse(req.url);if (pathname === "/") {console.log("pathname =");console.log(pathname);let filepath = "/sdcard/aaa.jia";console.log(filepath);fs.readFile(filepath, (err, data) => {console.log("data....");if (err) {res.end(err);return;}res.writeHead(200, {"Content-Disposition": "attachment; filename=" + "aaaaaaaa.txt","content-type": "application/octet-stream","Access-Control-Allow-Origin": "*","Access-Control-Allow-Headers": "X-Requested-With","Access-Control-Allow-Methods": "PUT,POST,GET,DELETE,OPTIONS",});fs.createReadStream(filepath).pipe(res);});}
});
server.listen(8000);
3. autojs下载文件

因为我是直接用autojs执行的nodejs代码, 所以可以直接用IP 127.0.0.1

let url = "127.0.0.1:8000";
let r = http.get(url);
let filePath = "/sdcard/bbb.txt";
files.writeBytes(filePath, r.body.bytes())

使用以上代码即可复现, autojs下载大文件, 无响应的问题.

解决下载大文件无响应

var url = "127.0.0.1:8000";
var call = http.client().newCall(http.buildRequest(url, {method: "GET",})).execute();
var fs = new java.io.FileOutputStream("/sdcard/ccc.apk");
var buffer = util.java.array("byte", 1024); //byte[]
var byteSum = 0; //总共读取的文件大小
var byteRead; //每次读取的byte数
var is = call.body().byteStream();
var fos = call.body().contentLength();
log(fos);
log("开始下载");
while ((byteRead = is.read(buffer)) != -1) {byteSum += byteRead;fs.write(buffer, 0, byteRead); //读取//log((byteSum / fos) * 100 + "%")
}
log("下载完成");

下载大文件不可以用

r.body.bytes()

而要使用

call.body().byteStream();

然后每次只读写一小块, 直到没有数据可读, 就表示大文件写入完成.

环境

手机: Mi 11 Pro
Android版本: 11
Autojs版本: 9.0.13

参考

nodejs实现文件下载

@Tsing Yi 分享的群文件–下载百分比

名人名言

思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问
— 牙叔教程

声明

部分内容来自网络
本教程仅用于学习, 禁止用于其他用途

bilibili

牙叔教程

微信公众号 牙叔教程

QQ群

747748653

autojs下载大文件相关推荐

  1. libcurl使用多线程下载大文件源码示例!

    使用libcurl多线程下载大文件的基本思想: 首选打开文件,将文件等分为指定的片段,使用http range下载,一个线程下载一个片段,当线程下载片段时,它们将数据写到打开文件的指定位置,类似BT文 ...

  2. python 下载大文件

    python 下载大文件 文件过大,建议用迅雷 下载大文件 import os import time import requests# 下载大文件 def download_data(url, pa ...

  3. JavaScript 下载大文件解决方案(Blob+OjbectURL)

    JavaScript 下载大文件解决方案(Blob+OjbectURL) 参考文章: (1)JavaScript 下载大文件解决方案(Blob+OjbectURL) (2)https://www.cn ...

  4. python requests下载文件很慢-python requests 下载大文件不完整

    目前我有一个脚本, 从帝联的 CDN 外链获取一下文件作为备份. 使用的是 Python 2.7.10 requests 2.8.1 目前碰到一个情况, 使用 requests 下载大文件的时候会出现 ...

  5. python下载大文件-golang/python 下载大文件时怎样避免oom

    问题场景:高频系统中,agent 会向ATS 服务器发出刷新和预缓存的请求,这里的请求head 里面有GET ,PURGE等,因为一般的预缓存都是小文件,但是某天,突然服务器oom...罪魁祸首发现是 ...

  6. python下载大文件-使用请求在python中下载大文件

    请求是一个非常好的库.我想用它下载大文件(>1GB).问题是不可能将整个文件保存在内存中,我需要将其分块读取.以下代码有问题 1 2 3 4 5 6 7 8 9 10 11import requ ...

  7. python下载大文件-python requests 下载大文件不完整

    目前我有一个脚本, 从帝联的 CDN 外链获取一下文件作为备份. 使用的是 Python 2.7.10 requests 2.8.1 目前碰到一个情况, 使用 requests 下载大文件的时候会出现 ...

  8. Android 开发工具类 27_多线程下载大文件

    多线程下载大文件时序图 FileDownloader.java 1 package com.wangjialin.internet.service.downloader; 2 3 import jav ...

  9. requests下载大文件_11种方法教你用Python高效下载资源!

    在本教程中,你将学习如何使用不同的Python模块从web下载文件.此外,你将下载常规文件.web页面.Amazon S3和其他资源. 最后,你将学习如何克服可能遇到的各种挑战,例如下载重定向的文件. ...

最新文章

  1. lighttpd+PHP安装
  2. 发布程序后显示:未能创建类型
  3. 排版 项目 html,实现HTML自动排版的法则2_html
  4. docker部署项目,对镜像,容器的操作
  5. 8051系列单片机汇编语言指令速查表(汇编语言的111条指
  6. mybatisplus 一次性执行多条SQL语句插入(Oracle篇)
  7. cmd如何默认以管理身份运行
  8. java纯数字正则表达式_JAVA验证数字的正则表达式,来一发
  9. leetcode python3 简单题198. House Robber
  10. 关闭此标签页 关闭所有标签页easyUI
  11. 测试知识 - 兼容性测试
  12. Blake2b算法 php,Blake2b算法是什么?Blake2b算法币种盘点
  13. android 颜色自动变淡,android 颜色值变化小解
  14. MacBook使用U盘重装系统
  15. elasticsearch中基于slop参数实现近似匹配
  16. 解决conda在Downloading and Extracting Packages时下载速度慢的问题
  17. 数独-- 一个高效率生成数独的算法
  18. 什么事件必须要我王二狗来处理?
  19. js 批量坐标转换经纬度_如何批量转换为百度经纬度
  20. 基于python Moviepy的视频字幕识别和合成!

热门文章

  1. 为什么公有云在中国落地难
  2. linux运维工程师前景怎样 就业薪资待遇高吗
  3. 老码农眼中的CRM 图解
  4. QT开发一款MD5校验工具
  5. 零售行业的六大主要EDI报文
  6. 旅行时间问题(python)
  7. Chrome浏览器无法启动,因为应用程序的并行配置不正确
  8. “破局者”氚云——低代码应用搭建工具,基于钉钉敏捷搭建企业专属应用
  9. 什么样的人当不好程序员?
  10. matlab识别中国象棋棋盘,一种基于图像处理的中国象棋识别系统及方法与流程