我使用以下代码从字节数组中读取错误消息,并且第一次正常工作但如果我第二次尝试访问它时会抛出错误:
errorData = process.standardError.readUTFBytes(process.standardError.bytesAvailable);
StandardError的类型为InboundPipe?
错误是:
Error: Error #3212: Cannot perform operation on a NativeProcess that is not running.
即使进程正在运行(process.running为true)。这是对readUTFBytes的第二次调用,这似乎是原因。
更新
这是一个接一个地调用同一个调用的代码。错误发生在下一行和process.running没有从true更改。发生在第二个电话上。
errorData = process.standardError.readUTFBytes(process.standardError.bytesAvailable);
errorData = process.standardError.readUTFBytes(process.standardError.bytesAvailable);
我还发现standardError是 InboundPipe 实例并实现 IDataInput 。
更新2:
谢谢你的帮助。我在查看bytesAvailable属性时找到了这个文档。
[只读]返回可供读取的数据的字节数 在输入缓冲区中。用户代码必须致电
bytesAvailable
以确保这一点 在尝试使用其中一个读取之前,有足够的数据可用 阅读方法。
当我调用readUTFBytes()时,它会将可用字节重置为0.因此,当我第二次读取它并且没有可用字节时,它会导致错误。在我看来,错误是或可能是不正确的或本机进程。运行标志不正确。
我调查了它是否有position
属性而它没有,至少在这种情况下没有。
答案 0 :(得分:3)
在阅读过程之前,您是否可以尝试将position
设置为零,尤其是在重复访问之前:
将文件指针的当前位置(以字节为单位)移动或返回ByteArray对象。这是读取方法的下一次调用开始读取或写入方法开始写入的时间点。
//ByteArray example
var source: String = "Some data";
var data: ByteArray = new ByteArray();
data.writeUTFBytes(source);
data.position = 0;
trace(data.readUTFBytes(data.bytesAvailable));
data.position = 0;
trace(data.readUTFBytes(data.bytesAvailable));
答案 1 :(得分:0)
这是一个棘手的问题,因为该对象不是一个字节数组,尽管它看起来像一个(相同的方法和几乎相同的属性)。它是一个也实现IDataInput的InboundPipe。
我在查看bytesAvailable
属性时找到了此文档。
[只读]返回可供读取的数据的字节数 在输入缓冲区中。用户代码必须致电
bytesAvailable
以确保这一点 在试图用其中一个读取之前有足够的数据 阅读方法。
当我调用readUTFBytes()
时,它会将可用字节重置为0.因此,当我第二次调用它并且没有可用字节时,会导致错误。在我看来,错误是或者可能是不正确的。本机进程。运行标志不正确,尽管我有理由相信它是前者。
解决方案是在调用read操作之前检查bytesAvailable,如果以后需要访问它,则存储该值。
if (process.standardError.bytesAvailable) {
errorData = process.standardError.readUTFBytes(process.standardError.bytesAvailable);
errorDataArray.push(errorData);
}
我研究了它是否有位置属性而它没有,至少在这种情况下不是。