在我的應用程序中,我使用Files.write和org.jclouds.blobstore.domain.Blob.putBlob將一個字節數組寫入4MB文件。兩者以並行方式。第二個選項(jcloud)更快。將字節數組寫入文件的快速方法
我想知道是否有更快的方法來寫入一個字節數組到文件中。如果我實現我的Files.write它更好。
由於
在我的應用程序中,我使用Files.write和org.jclouds.blobstore.domain.Blob.putBlob將一個字節數組寫入4MB文件。兩者以並行方式。第二個選項(jcloud)更快。將字節數組寫入文件的快速方法
我想知道是否有更快的方法來寫入一個字節數組到文件中。如果我實現我的Files.write它更好。
由於
我看着代碼,和(令人驚訝)Files.write(Path, byte[], OpenOption ...)
使用8192個字節的固定大小的緩衝器寫入該文件。 (Java 7 & Java 8版本)
您應該可以通過直接寫入來獲得更好的性能;例如
byte[] bytes = ...
try (FileOutputStream fos = new FileOutputStream(...)) {
fos.write(bytes);
}
我會測試。謝謝 –
我做了兩個程序。首先使用Files.write,然後使用FileOutputStream創建4個4MB的文件。 Files.write耗時47秒,FileOutputStream 53秒。
public class TestFileWrite {
public static void main(String[] args) {
try {
Path path = Paths.get("/home/felipe/teste.txt");
byte[] data = Files.readAllBytes(path);
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD HH:mm:ss");
System.out.println("TestFileWrite");
System.out.println("start: " + sdf.format(new Date()));
for (int i = 0; i < 1000; i++) {
Files.write(Paths.get("/home/felipe/Test/testFileWrite/file" + i + ".txt"), data);
}
System.out.println("end: " + sdf.format(new Date()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class TestOutputStream {
public static void main(String[] args) {
Path path = Paths.get("/home/felipe/teste.txt");
byte[] data = null;
try {
data = Files.readAllBytes(path);
} catch (IOException e1) {
e1.printStackTrace();
}
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD HH:mm:ss");
System.out.println("TestOutputStream");
System.out.println("start: " + sdf.format(new Date()));
for (int i = 0; i < 1000; i++) {
try (OutputStream out = new FileOutputStream("/home/felipe/Test/testOutputStream/file" + i + ".txt")) {
out.write(data);
} catch (IOException e) {
e.printStackTrace();
}
// Files.write(Paths.get("), data);
}
System.out.println("end: " + sdf.format(new Date()));
}
}
在數據寫入磁盤之前,文件系統高速緩存可能會使文件寫入完成。您的基準似乎不允許這樣做。 –
正如目前所提出的那樣,問題太過情境化。您需要提供更多的上下文 - 使其成爲特定的*問題,理想情況下使用MCVE,以便我們能夠有效回答。 –