Advanced Java Services | Performancevergleich IO versus NIO |
Es wird eine Textdatei der Größe 26,2 mb gelesen.
Die Datei wird byteweise gelesen und sofort byteweise weggeschrieben.
private static boolean readAndWriteUnbuffered(String sourcefile, String destfile) { try(FileReader fr = new FileReader(sourcefile); FileWriter fw = new FileWriter(destfile); ) { int ch; while( (ch=fr.read()) != -1 ) { fw.write(ch); } return true; } catch(IOException ex) { ex.printStackTrace(); return false; } }
Die Datei wird zeilenweise gelesen und sofort wieder zeilenweise weggeschrieben.
private static boolean readAndWriteBuffered(String sourcefile, String destfile) { try(BufferedReader br = new BufferedReader( new FileReader(sourcefile)); BufferedWriter bw = new BufferedWriter( new FileWriter(destfile)); ) { String line ; while( (line = br.readLine()) != null ) { bw.write(line); bw.newLine(); } return true; } catch(IOException ex) { ex.printStackTrace(); return false; } }
Die Größe des ByteBuffers kann variiert werden.
private static boolean readAndWriteWithFileChannels(String sourcefile, String destfile, int bufsize) { try(FileInputStream fis = new FileInputStream(sourcefile); FileOutputStream fos = new FileOutputStream(destfile);) // FileNotFoundException { FileChannel fcin = fis.getChannel(); FileChannel fcout = fos.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(bufsize); //ByteBuffer buffer = ByteBuffer.allocateDirect(bufsize); for(int count = 0; (count = fcin.read(buffer)) != -1;) // IOException { // read hat in den buffer geschrieben buffer.flip(); // buffer zum Auslesen einrichten fcout.write(buffer); // liest den buffer aus und schreibt in den channel buffer.clear(); // buffer zum Schreiben einrichten } return true; } catch(FileNotFoundException ex) { ex.printStackTrace(); return false; } catch(IOException ex) { ex.printStackTrace(); return false; } }
Die Zeiten unterliegen Schwankungen.