更新4
Per Greg的建议我创建了一对图像/文本,使用100k块显示从37k图像到base64编码的输出.由于文件只有37k,所以可以说循环只迭代一次,因此没有附加任何内容.另一对使用10k块显示从相同的37k图像到base64编码的输出.由于文件是37k,循环迭代四次,并且数据被明确附加.
对这两个文件进行差异显示,在10kb块文件上有一个很大的区别,它从第214行开始,到第640行结束.
更新3
这是我的代码现在的位置.清理了一下但仍产生相同的效果:
// Read data in chunks from the original file
[originalFile seekToEndOfFile];
NSUInteger fileLength = [originalFile offsetInFile];
[originalFile seekToFileOffset:0];
NSUInteger chunkSize = 100 * 1024;
NSUInteger offset = 0;
while(offset < fileLength) {
NSData *chunk = [originalFile readDataOfLength:chunkSize];
offset += chunkSize;
// Convert the chunk to a base64 encoded string and back into NSData
NSString … 我正在努力将图像数据从文件转码为base64编码的字符串,然后在使用NSStream读取文件时返回字节.我想我差不多了,但是在转换过程中我在各个点继续遇到EXC_BAD_ACCESS.
我对NSStream和缓冲区的世界相当新,所以如果我采取绝对错误的方法,请随时告诉我.
这是我到目前为止所得到的:
// Copy the bytes from our file input stream buffer
void *base64buffer = malloc(self.buffer[self.bufferOffset]);
// Convert the bytes to NSData for the base64 encode
NSData *dataToEncode = [NSData dataWithBytesNoCopy:base64buffer length:sizeof(base64buffer) freeWhenDone:YES];
// Convert our NSData into a base64 encoded string
NSString *base64EncodedData = [dataToEncode base64EncodedString];
// Convert our base64 encoded string back into NSData
NSData *encodedData = [base64EncodedData dataUsingEncoding:NSUTF8StringEncoding];
// Write the bytes to our output stream
bytesWritten = [self.producerStream write:[encodedData bytes] maxLength:[encodedData length]];
// Clean up …Run Code Online (Sandbox Code Playgroud)