Skip to content

Commit c350f21

Browse files
anu3990ehennum
authored andcommitted
Improving the FileHandle efficiency.
1 parent d56a832 commit c350f21

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

marklogic-client-api/src/main/java/com/marklogic/client/impl/OkHttpServices.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5388,7 +5388,7 @@ private <T> T getEntity(ResponseBody body, Class<T> as) {
53885388
}
53895389
Path path = Files.createTempFile("tmp", suffix);
53905390
if ( isBinary == true ) {
5391-
Files.write(path, body.bytes());
5391+
Utilities.write(body.byteStream(), path);
53925392
} else {
53935393
Writer out = Files.newBufferedWriter(path, Charset.forName("UTF-8"));
53945394
try {

marklogic-client-api/src/main/java/com/marklogic/client/impl/Utilities.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,14 @@
2424
import java.io.IOException;
2525
import java.io.InputStream;
2626
import java.io.OutputStream;
27+
import java.io.OutputStreamWriter;
28+
import java.io.RandomAccessFile;
2729
import java.io.Reader;
2830
import java.io.StringReader;
31+
import java.nio.ByteBuffer;
32+
import java.nio.channels.FileChannel;
2933
import java.nio.charset.Charset;
34+
import java.nio.file.Path;
3035
import java.util.ArrayList;
3136
import java.util.List;
3237

@@ -60,6 +65,7 @@ public final class Utilities {
6065
private static DocumentBuilderFactory factory;
6166

6267
private static DatatypeFactory datatypeFactory;
68+
static private int BUFFER_SIZE = 8192;
6369

6470
private static DocumentBuilderFactory getFactory()
6571
throws ParserConfigurationException {
@@ -669,4 +675,26 @@ static public DatatypeFactory getDatatypeFactory() {
669675
}
670676
return datatypeFactory;
671677
}
678+
679+
static public void write(InputStream in, Path path) {
680+
try {
681+
RandomAccessFile outFile = new RandomAccessFile(path.toString(), "rw");
682+
FileChannel inChannel = outFile.getChannel();
683+
byte[] buf = new byte[BUFFER_SIZE * 2];
684+
ByteBuffer byteBuf;
685+
686+
while (in.read(buf) != -1) {
687+
byteBuf = ByteBuffer.wrap(buf);
688+
byteBuf.flip();
689+
inChannel.write(byteBuf);
690+
byteBuf.clear();
691+
}
692+
outFile.close();
693+
} catch (IOException e) {
694+
throw new MarkLogicIOException("Internal Exception occured.");
695+
}
696+
}
697+
698+
static public void write(Reader in, OutputStreamWriter out) { }
699+
static public void write(Reader in, OutputStream out) {}
672700
}

0 commit comments

Comments
 (0)