21
21
import com .facebook .react .modules .core .DeviceEventManagerModule ;
22
22
23
23
import java .io .*;
24
- import java .nio .ByteBuffer ;
25
24
import java .nio .charset .Charset ;
26
- import java .nio .charset .CharsetEncoder ;
27
25
import java .security .MessageDigest ;
28
26
import java .util .ArrayList ;
29
27
import java .util .HashMap ;
@@ -360,20 +358,25 @@ else if (resolved == null) {
360
358
fs = new FileInputStream (new File (path ));
361
359
}
362
360
363
- byte [] buffer = new byte [chunkSize ];
364
361
int cursor = 0 ;
365
362
boolean error = false ;
366
363
367
364
if (encoding .equalsIgnoreCase ("utf8" )) {
368
- CharsetEncoder encoder = Charset .forName ("UTF-8" ).newEncoder ();
369
- while ((cursor = fs .read (buffer )) != -1 ) {
370
- encoder .encode (ByteBuffer .wrap (buffer ).asCharBuffer ());
371
- String chunk = new String (buffer , 0 , cursor );
365
+ InputStreamReader isr = new InputStreamReader (fs , Charset .forName ("UTF-8" ));
366
+ BufferedReader reader = new BufferedReader (isr , chunkSize );
367
+ char [] buffer = new char [chunkSize ];
368
+ // read chunks of the string
369
+ while (reader .read (buffer , 0 , chunkSize ) != -1 ) {
370
+ String chunk = new String (buffer );
372
371
emitStreamEvent (streamId , "data" , chunk );
373
372
if (tick > 0 )
374
373
SystemClock .sleep (tick );
375
374
}
375
+
376
+ reader .close ();
377
+ isr .close ();
376
378
} else if (encoding .equalsIgnoreCase ("ascii" )) {
379
+ byte [] buffer = new byte [chunkSize ];
377
380
while ((cursor = fs .read (buffer )) != -1 ) {
378
381
WritableArray chunk = Arguments .createArray ();
379
382
for (int i = 0 ; i < cursor ; i ++) {
@@ -384,6 +387,7 @@ else if (resolved == null) {
384
387
SystemClock .sleep (tick );
385
388
}
386
389
} else if (encoding .equalsIgnoreCase ("base64" )) {
390
+ byte [] buffer = new byte [chunkSize ];
387
391
while ((cursor = fs .read (buffer )) != -1 ) {
388
392
if (cursor < chunkSize ) {
389
393
byte [] copy = new byte [cursor ];
@@ -407,7 +411,7 @@ else if (resolved == null) {
407
411
if (!error )
408
412
emitStreamEvent (streamId , "end" , "" );
409
413
fs .close ();
410
- buffer = null ;
414
+
411
415
} catch (FileNotFoundException err ) {
412
416
emitStreamEvent (
413
417
streamId ,
@@ -710,8 +714,8 @@ static void exists(String path, Callback callback) {
710
714
/**
711
715
* List content of folder
712
716
*
713
- * @param path Target folder
714
- * @param callback JS context callback
717
+ * @param path Target folder
718
+ * @param promise JS context promise
715
719
*/
716
720
static void ls (String path , Promise promise ) {
717
721
try {
0 commit comments