Http 在Rebol中读取大型二进制文件失败

Http 在Rebol中读取大型二进制文件失败,http,rebol,Http,Rebol,由于内存不足,以下Rebol代码失败: read/binary http://mirror.bytemark.co.uk/ubuntu-releases/lucid/ ubuntu-10.04-desktop-i386.iso 如何使用Rebol通过HTTP读取大型二进制文件?直接读取大型文件可能会失败,因为它保存在内存中,可能会耗尽可用内存 本参考文件描述了一种分块读取文件的方法,前提是您可以找到一个FTP服务器来获取该文件的源文件: 快速搜索表明Ubuntu有F

由于内存不足,以下Rebol代码失败:

read/binary http://mirror.bytemark.co.uk/ubuntu-releases/lucid/
            ubuntu-10.04-desktop-i386.iso 

如何使用Rebol通过HTTP读取大型二进制文件?

直接读取大型文件可能会失败,因为它保存在内存中,可能会耗尽可用内存

本参考文件描述了一种分块读取文件的方法,前提是您可以找到一个FTP服务器来获取该文件的源文件:


快速搜索表明Ubuntu有FTP服务器,但我还没有检查它们是否包含您需要的版本。祝你好运

Rebol 2端口有点乱。因此,您不能直接应用how to示例,因为
read
端口上不起作用功能(读/写/写的功能要少得多)

但是,如果您跳过一些障碍,使用
/direct
优化直接打开文件,您将得到一些有用的东西:

; Rebol 2 chunking http download sample

filename: %ubuntu-10.04-desktop-i386.iso
base-url: http://mirror.bytemark.co.uk/ubuntu-releases/lucid/
chunk-size: 32000

in-port: open/binary/direct rejoin [base-url filename]
out-port: open/binary/direct filename
while [not none? data: copy/part in-port chunk-size] [
    append out-port data
]
close in-port
close out-port
(更新:我没有注意到READ-IO示例,因为我不太使用R2,也没有见过READ-IO。它也可以在http上工作,并且具有更好的性能。但我会让您进行比较。:p)

在REBOL3中,您可以从
端口进行读写操作。这意味着在理论上,对大文件样本的修改应该是可行的


然而,R3 alpha的当前版本中存在一个bug,它忽略了
/part
细化,并在
读取期间返回整个文件的内容(如果方案是HTTP::(

用这个来下载大文件。

这个问题是meta上的一个话题:看起来不错,但它被包装到了一个没有名字的上下文中。那么我该如何使用它呢?我试图提取批下载函数,但我遇到了一个奇怪的错误,即缺少括号。你可以通过删除上下文或创建另一个函数来公开它这是全局的。例如,在上下文
结束之前设置'bd:batch download
,然后可以使用'bd函数。例如:
bd/to dir[http://www.http://mirror.bytemark.co.uk/ubuntu-releases/lucid/ubuntu-10.04-desktop-i386.iso]%下载/
开始下载。我在10%时中止了下载,因为我不想要这个文件。
; Rebol 3 chunking http download sample
; Warning: does not work in A99 release

filename: %ubuntu-10.04-desktop-i386.iso
base-url: http://mirror.bytemark.co.uk/ubuntu-releases/lucid/
chunk-size: 32000

in-port: open/read rejoin [base-url filename]
out-port: open/write filename
while [not empty? data: read/part in-port chunk-size] [
    write out-port data
]
close in-port
close out-port