Input/Output NIO vs . IO

XPrototypeX

Aktives Mitglied
Hey,

wollte mal Fragen welche der beiden Varianten schneller ist. Welche ich nehme ist in dem Fall egal, weil ich entweder das .txt File zeilenweise einlesen kann oder Byte weiße. Geht also erstmal um die Performance. Kleine Nebendaten: Größe der .txt ca 100-200mb. Eine Zeile 288Byte.
Ich hab gelesen NIO soll etwas schneller sein. Stimmt das?
 
N

nillehammer

Gast
Grundsätzlich sollte NIO verwendet werden. Ich glaube aber, dass es in so einem einfachen Fall (nur ein Thread öffnet genau eine Datei), keinen Performanceunterschied gibt.
 

XPrototypeX

Aktives Mitglied
So...

Hab mal einen kleinen Test gemacht und habe eine Test datei mit 8*8 Zeichen. Nun will ich bei 8 eingelesenen Bytes ausgeben "eine Zeile" leider klappt es nicht ganz. Gibt keine Fehlermeldung allerdings gibt er mir den Text scheinbar random aus.
Hier mal mein code:

Java:
public void readDataIntoBuffer() {
		FileInputStream fileInput;
		FileChannel channel;
		long size;
		ByteBuffer buffer;
		int n = 0;

		try {
			fileInput = new FileInputStream("test.txt");
			channel = fileInput.getChannel();
			size = channel.size();
			buffer = ByteBuffer.allocate((int) size);
			channel.read(buffer);
			buffer.rewind();
			
			 for (int i = 0; i < size; i++){
			        System.out.println((char) buffer.get());
			       
			        if(n == 8){
			        	System.out.println("eine zeile");
			        	n = 0;
			        }
			        n++;

			     
			 }
	
			channel.close();
			fileInput.close();
		} catch (IOException exc) {
			System.out.println(exc);
			System.exit(1);
		}
	}
 

Attila

Bekanntes Mitglied
Java:
buffer.rewind();
CharBuffer chb = buffer.asCharBuffer();
while (chb.hasRemaining()){
  // ...
}
 

Lumaraf

Bekanntes Mitglied
Der Performanceunterschied zwischen IO und NIO (und AIO) ist vernachläßigbar. Häufig ist die Arbeit mit IO-Streams auch einfacher. Vorteile hat NIO imho nur wenn man häufig Daten via FileChannel#transferTo() aus Dateien in Sockets schreiben will. Ansonsten würde ich NIO noch verwenden wenn man viele Socketverbindungen gleichzeitig verwalten will. In dem Fall liegt der Vorteil aber auch nicht unbedingt in der Performance, sondern in dem reduzierten Arbeitsspeicherbedarf duch die Verwendung von weniger Threads.
 

Neue Themen


Oben