gpt4 book ai didi

objective-c - 如何使用 AsyncSocket 通过网络传输大文件/目录

转载 作者:行者123 更新时间:2023-12-03 16:32:49 27 4
gpt4 key购买 nike

我已经尝试过 NSTask > NSData 方法,但是对于超过 1GB 的任何内容,CPU/内存开销都非常大,因此我需要找到一种方法来执行此操作,例如 FTP 服务器可以做到这一点。

编辑:远程桌面的复制文件是如何做到的?

最佳答案

我想我明白了。我必须将其以小字节大小的形式读入内存(哈哈,明白双关语了吗?),然后以这种方式传输。请记住,这仅适用于文件,不适用于目录。我在 450MB 文件上对其进行了测试,大约 3 分钟即可完成复制,字节数与源文件完全相同。这是一个视频,当我将其流式传输到客户端时,我也可以播放它。很漂亮吧?

言归正传,这是我使用的代码,稍微修改了一下以进行简单的文件复制,而不是通过网络进行复制。

[[NSFileManager defaultManager] createFileAtPath:@"/path/to/file/dest" contents:nil attributes:nil];
NSFileHandle *output = [NSFileHandle fileHandleForWritingAtPath:@"/path/to/file/dest"];

uint64 offset = 0;
uint32 chunkSize = 8192;


NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:@"/path/to/file/source"];
NSAutoreleasePool *autoreleasePool = [[NSAutoreleasePool alloc] init];
NSData *data = [handle readDataOfLength:chunkSize];

NSLog(@"Entering Loop.");

while ([data length] > 0) {
[output seekToEndOfFile];
[output writeData:data];
offset += [data length];

NSLog(@"Switching Loop.");

[autoreleasePool release];
autoreleasePool = [[NSAutoreleasePool alloc] init];

[handle seekToFileOffset:offset];
data = [handle readDataOfLength:chunkSize];
}

NSLog(@"Exited Loop.");

[handle closeFile];
[autoreleasePool release];

[output closeFile];
[output release];

关于objective-c - 如何使用 AsyncSocket 通过网络传输大文件/目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8814525/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com