diff --git a/commons/src/main/java/org/archive/io/RecordingInputStream.java b/commons/src/main/java/org/archive/io/RecordingInputStream.java index 8fea7f52..b46905ed 100644 --- a/commons/src/main/java/org/archive/io/RecordingInputStream.java +++ b/commons/src/main/java/org/archive/io/RecordingInputStream.java @@ -348,4 +348,8 @@ public class RecordingInputStream public int getRecordedBufferLength() { return recordingOutputStream.getBufferLength(); } + + public void clearForReuse() throws IOException { + recordingOutputStream.clearForReuse(); + } } diff --git a/commons/src/main/java/org/archive/io/RecordingOutputStream.java b/commons/src/main/java/org/archive/io/RecordingOutputStream.java index d3756da0..4d0713da 100644 --- a/commons/src/main/java/org/archive/io/RecordingOutputStream.java +++ b/commons/src/main/java/org/archive/io/RecordingOutputStream.java @@ -181,19 +181,8 @@ public class RecordingOutputStream extends OutputStream { throw new IOException("ROS already open for " +Thread.currentThread().getName()); } + clearForReuse(); this.out = wrappedStream; - this.position = 0; - this.markPosition = 0; - this.maxPosition = 0; - this.size = 0; - this.messageBodyBeginMark = -1; - // ensure recording turned on - this.recording = true; - // Always begins false; must use startDigest() to begin - this.shouldDigest = false; - if (this.diskStream != null) { - closeDiskStream(); - } if (this.diskStream == null) { // TODO: Fix so we only make file when its actually needed. FileOutputStream fis = new FileOutputStream(this.backingFilename); @@ -567,5 +556,21 @@ public class RecordingOutputStream extends OutputStream { public long getRemainingLength() { return maxLength - position; } + + public void clearForReuse() throws IOException { + this.out = null; + this.position = 0; + this.markPosition = 0; + this.maxPosition = 0; + this.size = 0; + this.messageBodyBeginMark = -1; + // ensure recording turned on + this.recording = true; + // Always begins false; must use startDigest() to begin + this.shouldDigest = false; + if (this.diskStream != null) { + closeDiskStream(); + } + } } diff --git a/commons/src/main/java/org/archive/util/Recorder.java b/commons/src/main/java/org/archive/util/Recorder.java index 298481ea..425344bb 100644 --- a/commons/src/main/java/org/archive/util/Recorder.java +++ b/commons/src/main/java/org/archive/util/Recorder.java @@ -577,5 +577,17 @@ public class Recorder { public void endReplays() { ArchiveUtils.closeQuietly(replayCharSequence); replayCharSequence = null; + + // like closeQuietly + try { + ris.clearForReuse(); + } catch (IOException ioe) { + } + + // like closeQuietly + try { + ros.clearForReuse(); + } catch (IOException e) { + } } }