File tree Expand file tree Collapse file tree 2 files changed +20
-1
lines changed Expand file tree Collapse file tree 2 files changed +20
-1
lines changed Original file line number Diff line number Diff line change @@ -176,7 +176,8 @@ public void call(Subscriber<? super String> o) {
176
176
n = i .read (buffer );
177
177
while (n != -1 && !o .isUnsubscribed ()) {
178
178
o .onNext (new String (buffer , 0 , n ));
179
- n = i .read (buffer );
179
+ if (!o .isUnsubscribed ())
180
+ n = i .read (buffer );
180
181
}
181
182
} catch (IOException e ) {
182
183
o .onError (e );
Original file line number Diff line number Diff line change 38
38
import java .io .ByteArrayInputStream ;
39
39
import java .io .FilterReader ;
40
40
import java .io .IOException ;
41
+ import java .io .InputStreamReader ;
41
42
import java .io .Reader ;
42
43
import java .io .StringReader ;
43
44
import java .nio .charset .Charset ;
@@ -303,6 +304,23 @@ public void testFromReader() {
303
304
assertNotSame (inStr , outStr );
304
305
assertEquals (inStr , outStr );
305
306
}
307
+
308
+ @ Test
309
+ public void testFromReaderWillUnsubscribeBeforeCallingNextRead () {
310
+ final byte [] inBytes = "test" .getBytes ();
311
+ final AtomicInteger numReads = new AtomicInteger (0 );
312
+ ByteArrayInputStream is = new ByteArrayInputStream (inBytes ) {
313
+
314
+ @ Override
315
+ public synchronized int read (byte [] b , int off , int len ) {
316
+ numReads .incrementAndGet ();
317
+ return super .read (b , off , len );
318
+ }
319
+ };
320
+ StringObservable .from (new InputStreamReader (is )).first ().toBlocking ()
321
+ .single ();
322
+ assertEquals (1 , numReads .get ());
323
+ }
306
324
307
325
@ Test
308
326
public void testByLine () {
You can’t perform that action at this time.
0 commit comments