- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想向 NSInputStream 添加三个“部分”:一个 NSString,另一个流的输出,然后是另一个 NSString。思路如下:
第一个和最后一个 NSString 代表 SOAP 请求的开始和结束,而流的输出是加载一个非常大的文件并将其编码为 Base64 字符串的结果。所以,最后我会让最终的 NSInputStream 像这样保存整个 SOAP 请求:
我希望将整个请求保存在 NSInputStream 中的原因有两个:
我认为这是强制以 HTTP 1.1 block 发送最终请求的唯一方法(我需要这样做,否则,如果请求变得太大,服务器将不会接受它)。所以,我知道这样做:
NSInputStream *dataStream = ....;
[request setHTTPBodyStream:dataStream];
确保请求将作为 HTTP 1.1 block 发送,而不是作为一个巨大的原始 SOAP 请求发送。
所以,我想知道这是如何实现的——也就是说,我如何将事物“排队”到 NSInputStream 中?甚至可以做到吗?有替代方法吗?
仅供引用,在Java中可以这样实现
Vector<InputStream> streamVec = new Vector<InputStream>();
BufferedInputStream fStream = new BufferedInputStream(fileData.getInputStream());
Base64InputStream b64stream = new Base64InputStream(fStream, true);
String[] SOAPBody = GenerateSOAPBody(fileInfo).split("CUT_HERE");
streamVec.add(new ByteArrayInputStream(SOAPBody[0].getBytes()));
streamVec.add(b64stream);
streamVec.add(new ByteArrayInputStream(SOAPBody[1].getBytes()));
SequenceInputStream seqStream = new SequenceInputStream(streamVec.elements());
因为 Java 有这些对象可用,但 Objective-c 中的 NSStreams 看起来像非常低级的对象并且很难使用。
注意:我完全重写了 2 天前提出的原始问题,因为我认为新的编辑更清楚地解释了问题所在。我希望它能帮助它更容易理解和回答
这是我到目前为止能够实现的:我没有尝试排队到流中,而是使用临时文件首先写入
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url];
...
NSInputStream *dataStream = [NSInputStream inputStreamWithFileAtPath:_tempFilePath];
[request setHTTPBodyStream:dataStream];
这确保了文件内容的 HTTP 1.1 分 block 传输。连接完成后,删除临时文件。
这似乎工作正常,但当然这是一个烦人的工作。我不想写入一个临时文件,因为它本来可以由流处理(理想情况下)。如果有人还有更好的建议,请告诉我:)
好的,另一个更新是有序的。虽然我的文件写入似乎有效,但我现在遇到了一个意想不到的问题,我的一些请求无法上传到服务器。具体来说,一切都按计划进行,我正在将临时文件的内容读入一个流并将我请求的 HTTP 主体设置为这个流,它开始按照我的意愿传输 HTTP 1.1 block ——但对于一些一些数据包被丢弃的原因,最终请求——这是我的猜测——格式错误,因此失败。我认为丢弃数据包的问题是随机的,因为我在较大的请求中观察到它——也就是说,这个问题更有可能出现——而我的较小请求通常会顺利通过。在这个问题中,这当然是与原始问题不同的问题。如果有人知道是什么原因造成的,我在这里询问了这个问题:Packets dropped during chunked HTTP 1.1 request sent by NSURLConnection
最佳答案
您的解决方案是一个不错的选择,但您可以使用流来实现。这意味着对 NSInputStream
进行子类化,这并不简单,因为您需要实现许多方法。
基本上,您的子类最初会返回 header 字节,然后它将“内部”流中的字节返回到文件内容,然后在用完时返回页脚字节。这意味着记录页眉和页脚的大小以及到目前为止处理了多少,但这不是什么大问题。
有一个创建子类的例子 here它显示了您需要实现的棘手的隐藏方法,以使流子类正常工作而不抛出异常。
关于ios - 排队进入 NSInputStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15236133/
我正在尝试将输入流转换为字符串。我尝试转换的输入流是 NSURLRequest.HTTPBodyStream,显然 httpbody 设置为 null 并在您发出请求后替换为流。我该怎么做呢?这是我目
我在使用 NSInputStream 时遇到问题。我有连接到服务器的客户端应用程序,然后服务器将开始通过 TCP 每秒大约 1 条消息重复向我的客户端应用程序发送消息。服务器只是向客户端广播消息,消息
我正在尝试创建一个简单的iPhone应用程序,它可以与服务器通信(目前正在我的计算机上运行并且工作正常)。我一直在尝试使用 NSStream 类,但遇到了很多问题。我真的只是想使用流来模拟 telne
是否有办法查看 nsinputstream 中的值,例如将其转换为字符串? 最佳答案 我假设您指的是从 NSInputStream 返回的数据: - (NSInteger)read:(uint8_t
我的应用程序使用 NSInputStream,如下所示: inputStream.delegate = self; [inputStream scheduleInRunLoop:[NSRunLoop
在我的应用程序中,我使用 NSStreams 进行客户端服务器通信。在事件 hasbytesAvailable 的 delegate 方法中,当我读取数据时返回 null 案例:当长度为4096时读取
当我从服务器接收数据时出现错误(数据只是字符串)。 例如 服务器发送数据(15000字节) 我的 iPhone 收到数据(7878 字节) 所以我尝试搜索,我知道方法是答案。 但我无法应用我的代码..
我正在尝试使用 NSInputStream 通过 TCP 套接字连接接收数据。在服务器端,我先发送数据大小,然后再发送数据本身。在 iOS 客户端,我需要从 NSInputStream 中提取前 4
请帮助我,我快疯了。我需要创建一个 NSInputStream,这样我就可以通过 wifi 从摄像头读取实时预览。liveViewStream 是一个 NSInputStream-Instance-V
我正在将一个 java 客户端移植到 iphone,我一直在想是否有一个围绕 NSInputStream 的包装器来从停止在指定分隔符处的流中读取字符串?我正在考虑类似 Javas Scanner 类
我想向 NSInputStream 添加三个“部分”:一个 NSString,另一个流的输出,然后是另一个 NSString。思路如下: 第一个和最后一个 NSString 代表 SOAP 请求的开始
全部, 我有一台服务器,它有一个用于通信的 TCP 套接字流。我需要访问该流并读取它需要发送给我的初始数据。 我目前的代码如下。老实说,我对此完全视而不见。我不确定这是否正确,更不用说适合这项工作了。
我正在尝试通过 NSInputStream 从我的文档目录中读取自定义文件,以将其上传到 FTP 服务器。我使用的代码与 SimpleFTPSample 中演示的代码完全相同由苹果公司提供。只要文件为
嘿伙计们,我正在从网络服务器上下载一个 yaml 文件。我的 NSInputStream 与本地 yaml 文件配合得很好(使用 file://filename.yaml url 方案) 以下是相关代
我正在尝试打断 [NSOutputstream write] 当连接丢失时。 但是,即使我使用 关闭流,它似乎仍然继续阻塞 [NSOutputstream close]. 我想要实现的只是在服务器连接
我需要使用 Windows 1252 编码将图像流式传输到 .NET 后端服务。所以我相信我需要创建一个 NSURLRequest 并将其 HTTPBodyStream 设置为使用图像数据创建的 NS
我有 openssl 服务器和 Objective-C 客户端。我这样发消息 uint32_t testD = 161; err = SSL_write(ssl_, &testD, sizeof(ui
我正在从服务器按顺序获取 NSData block ,超过大约。 4096 字节,按顺序。每个接收到的 block 的大小可能不同。 我想做的是将所有这些字节附加到某处,同时从数据的开头开始读取,顺序
我在一个文件中有 100 MB 的数据。这 100 mb 数据将被虚拟地划分。即,我需要创建一个指向不同 5MB block 的 NSInputStream。这可以通过使用 NSData 创建流来实现
我想将 NSInputStream 传递给 MPMoviePlayerController、MPMoviePlayerViewController 或其他任何东西。 输入流利用了 Apple 框架不支
我是一名优秀的程序员,十分优秀!