- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我不断收到 java.io.IOException: Stream Closed,我似乎无法理解为什么。我在按钮按下(如下所示的对象)上创建两个 SensorReadings 对象(每个对象发送一个用于文件名的唯一字符串),该按钮打开两个 ObjectoutputStream 并写入两个单独的文件。我第一次使用它时,它工作得完美无缺,没有任何异常(exception)。当我完成对文件的写入后,我按下另一个按钮来关闭 Objectoutputstreams 并删除我写入的文件。
当我再次尝试按下按钮,使用新的 Objectoutputstreams 和具有不同名称的新文件创建新的 SensorReadings 对象时,每次尝试写入文件时,我都会遇到 java.io.IOException: Stream Closed。
关闭应用程序并重新启动将导致第一次再次完美工作,但第二次++时我遇到了同样的错误。
代码:
public class SensorReadings {
private String macAddress;
private String cacheFileAccelerationName;
private String cacheFileEulerAnglesName;
private File cacheFileAcceleration;
private File cacheFileEulerAngles;
private ObjectOutputStream accelerationStreamWriter;
private ObjectOutputStream euleranglesStreamWriter;
public SensorReadings(String macAddress, Context context) {
SimpleDateFormat dateFormata = new SimpleDateFormat("yyyy.MM.dd'-'HH:mm:ss");
this.macAddress = macAddress;
cacheFileAccelerationName = dateFormata.format(Calendar.getInstance().getTime())+macAddress+"-acceleration-cache";
cacheFileEulerAnglesName = dateFormata.format(Calendar.getInstance().getTime())+macAddress+"-eulerangles-cache";
cacheFileAcceleration = new File(context.getCacheDir(), cacheFileAccelerationName);
cacheFileEulerAngles = new File(context.getCacheDir(), cacheFileEulerAnglesName);
try {
accelerationStreamWriter = new ObjectOutputStream(new FileOutputStream(cacheFileAcceleration));
euleranglesStreamWriter = new ObjectOutputStream(new FileOutputStream(cacheFileEulerAngles));
} catch (FileNotFoundException e){
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
}
public void addAccelerationData(AccelerationReading reading){
try {
accelerationStreamWriter.writeUnshared(reading);
accelerationStreamWriter.reset();
} catch (IOException e) {
e.printStackTrace();
}
}
public void addEulerAngleData(EulerAnglesReading reading){
try {
euleranglesStreamWriter.writeUnshared(reading);
euleranglesStreamWriter.reset();
} catch (IOException e) {
e.printStackTrace();
}
public void closeFiles(){
try {
euleranglesStreamWriter.flush();
accelerationStreamWriter.flush();
euleranglesStreamWriter.close();
accelerationStreamWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
cacheFileEulerAngles.delete();
cacheFileAcceleration.delete();
}
}
每次我在创建新对象后尝试写入时都会遇到错误:
03-27 21:00:38.526 9882-9894/com.appitude.appitude W/System.err: java.io.IOException: Stream Closed
03-27 21:00:38.526 9882-9894/com.appitude.appitude W/System.err: at java.io.FileOutputStream.write(FileOutputStream.java:310)
03-27 21:00:38.526 9882-9894/com.appitude.appitude W/System.err: at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1946)
03-27 21:00:38.526 9882-9894/com.appitude.appitude W/System.err: at java.io.ObjectOutputStream$BlockDataOutputStream.writeByte(ObjectOutputStream.java:1986)
03-27 21:00:38.526 9882-9894/com.appitude.appitude W/System.err: at java.io.ObjectOutputStream.writeFatalException(ObjectOutputStream.java:1612)
03-27 21:00:38.526 9882-9894/com.appitude.appitude W/System.err: at java.io.ObjectOutputStream.writeUnshared(ObjectOutputStream.java:432)
03-27 21:00:38.526 9882-9894/com.appitude.appitude W/System.err: at com.appitude.appitude.SensorReadings.addAccelerationData(SensorReadings.java:103)
03-27 21:00:38.526 9882-9894/com.appitude.appitude W/System.err: at com.appitude.appitude.BLE_Connections.lambda$null$31d3e978$1$BLE_Connections(BLE_Connections.java:265)
03-27 21:00:38.526 9882-9894/com.appitude.appitude W/System.err: at com.appitude.appitude.BLE_Connections$$Lambda$24.apply(Unknown Source)
03-27 21:00:38.526 9882-9894/com.appitude.appitude W/System.err: at com.mbientlab.metawear.impl.DeviceDataConsumer.call(DeviceDataConsumer.java:51)
03-27 21:00:38.527 9882-9894/com.appitude.appitude W/System.err: at com.mbientlab.metawear.impl.StreamedDataConsumer.lambda$addDataHandler$1$StreamedDataConsumer(StreamedDataConsumer.java:138)
03-27 21:00:38.527 9882-9894/com.appitude.appitude W/System.err: at com.mbientlab.metawear.impl.StreamedDataConsumer$$Lambda$1.onResponseReceived(Unknown Source)
03-27 21:00:38.527 9882-9894/com.appitude.appitude W/System.err: at com.mbientlab.metawear.impl.JseMetaWearBoard.lambda$null$13$JseMetaWearBoard(JseMetaWearBoard.java:699)
03-27 21:00:38.527 9882-9894/com.appitude.appitude W/System.err: at com.mbientlab.metawear.impl.JseMetaWearBoard$$Lambda$30.onChange(Unknown Source)
03-27 21:00:38.527 9882-9894/com.appitude.appitude W/System.err: at com.mbientlab.metawear.android.BtleService$1.onCharacteristicChanged(BtleService.java:188)
03-27 21:00:38.527 9882-9894/com.appitude.appitude W/System.err: at android.bluetooth.BluetoothGatt$1.onNotify(BluetoothGatt.java:402)
03-27 21:00:38.527 9882-9894/com.appitude.appitude W/System.err: at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:177)
03-27 21:00:38.527 9882-9894/com.appitude.appitude W/System.err: at android.os.Binder.execTransact(Binder.java:573)
最佳答案
问题已解决。正在传输数据然后写入文件的连接的蓝牙设备在流关闭时不会停止,并在激活新 session 时继续尝试使用相同的流。
关于java.io.IOException : Stream Closed ObjectOutputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49520682/
我正在尝试实现具有以下签名的方法: public static Pair, Stream> flatten(Iterator, Stream>> iterator); 该方法的目标是将每种流类型展平
我有两个流从两个不同的 api 获取。 Stream get monthOutStream => monthOutController.stream; Stream get resultOutStre
Stream.of(int[])返回 Stream ,而 Stream.of(String[])返回 Stream . 为什么这两种方法的行为不同?两者都应该返回 Stream和 Stream或 St
我正在使用 rxdart在 dart 中处理流的包。我被困在处理一个特殊的问题上。 请看一下这个虚拟代码: final userId = BehaviorSubject(); Stream getSt
我到处都找遍了,还是没弄明白。我知道你可以用流建立两个关联: 用于支持数据存储的包装器意味着作为消费者和供应商之间的抽象层 数据随着时间的推移变得可用,而不是一次全部 SIMD 代表单指令,多数据;在
考虑下面的代码: List l=new ArrayList<>(); l.add(23);l.add(45);l.add(90); Stream str=l.stream
我有一个大型主干/requirejs 应用程序,我想迁移到 webpack,最新的“webpack”:“^4.27.1”,但我遇到了一个我无法解决的错误。 我一直在阅读 https://webpack
我正在使用 xmpp 开发聊天应用程序,根据我们的要求,我们有三台服务器 Apache Tomcat 7、ejabbered 2.1.11 和 mysql 5.5, to run xmppbot on
我知道如何使用 Java 库,并且我可以编写一些循环来执行我需要的操作,但问题更多,为什么 scala.collection.JavaConverters 中没有任何内容或scala.collecti
我正在尝试创建一个单一的衬里,它应该计算一个非常长的文本文件中的唯一单词。独特的词例如:márya fëdorovna scarlet-liveried,...所以基本上都是非英语词。 我的问题是我的
如果我有以下情况: StreamWriter MySW = null; try { Stream MyStream = new FileStream("asdf.txt"); MySW =
有人可以帮我将以下语句转换为 Java8: 我有一个像这样的 HashMap : private Map, List>> someMap; 我想在java8中转换以下逻辑: private Strin
有人可以帮我将以下语句转换为 Java8: 我有一个像这样的 HashMap : private Map, List>> someMap; 我想在java8中转换以下逻辑: private Strin
考虑两种测试方法parallel()和sequential(): @Test public void parallel() throws Exception { System.ou
我是 NodeJS 的新手,我基本上想做的是通过 HTTP 将 .pdf 上传到我的服务器。我正在使用 POST rquest 来处理 Content-Type multipart/form-data
哪个更好:MemoryStream.WriteTo(Stream destinationStream) 或 Stream.CopyTo(Stream destinationStream)?? 我正在谈
给定一个 Stream,我想创建一个新的 Stream,其中的元素在它们之间有时间延迟。 我尝试使用 tokio_core::reactor::Timeout 和 Stream 的 and_then
我是 Kafka Streams 和 Spring Cloud Stream 的新手,但在将集成相关代码移动到属性文件方面已经阅读了有关它的好东西,因此开发人员可以主要专注于事物的业务逻辑方面。 这里
源代码看起来非常相似:pump , pipe .为什么我要使用一个而不是另一个?一个只是另一个的更好版本吗? 最佳答案 Stream.pipe 现在显然是自 0.3.x 以来的首选方法,因此尽可能尝试
我正在寻找是否有更好的方法来解决我不得不使用这些签名的困境(注意:由于 Spock 测试,T[][] 是必需的,我提供 T[][] 作为数据提供商) 我的方法签名是: public T[][] cr
我是一名优秀的程序员,十分优秀!