Java Language
Lezers en schrijvers
Zoeken…
Invoering
Lezers en schrijvers en hun respectieve subklassen bieden eenvoudige I / O voor op tekst / tekens gebaseerde gegevens.
BufferedReader
Invoering
De klasse BufferedReader
is een wrapper voor andere klassen Reader
die twee hoofddoelen dient:
Een
BufferedReader
biedt buffering voor de ingepakteReader
. Hierdoor kan een toepassing tekens één voor één lezen zonder onnodige I / O-overheadkosten.Een
BufferedReader
biedt functionaliteit om tekst regel voor regel te lezen.
Basisprincipes van het gebruik van een BufferedReader
Het normale patroon voor het gebruik van een BufferedReader
is als volgt. Eerst verkrijgt u de Reader
waarvan u tekens wilt lezen. Vervolgens maakt u een BufferedReader
die de Reader
verpakt. Dan lees je karaktergegevens. Eindelijk sluit u de BufferedReader
die de omwikkelde `Reader sluit. Bijvoorbeeld:
File someFile = new File(...);
int aCount = 0;
try (FileReader fr = new FileReader(someFile);
BufferedReader br = new BufferedReader(fr)) {
// Count the number of 'a' characters.
int ch;
while ((ch = br.read()) != -1) {
if (ch == 'a') {
aCount++;
}
}
System.out.println("There are " + aCount + " 'a' characters in " + someFile);
}
U kunt dit patroon op elke Reader
toepassen
Opmerkingen:
We hebben Java 7 (of later) try-with-resources gebruikt om ervoor te zorgen dat de onderliggende lezer altijd gesloten is. Dit voorkomt een potentieel lekken van middelen. In eerdere versies van Java, zou expliciet in de buurt van de
BufferedReader
in eenfinally
blokkeren.De code in het
try
blok is vrijwel identiek aan wat we zouden gebruiken als we rechtstreeks vanuit deFileReader
zouden lezen. In feite functioneert eenBufferedReader
precies zoals deReader
die hij zich zou gedragen. Het verschil is dat deze versie een stuk efficiënter is.
De buffergrootte van de buffer
De methode BufferedReader.readLine ()
Voorbeeld: alle regels van een bestand in een lijst lezen
Dit wordt gedaan door elke regel in een bestand op te nemen en toe te voegen aan een List<String>
. De lijst wordt dan teruggegeven:
public List<String> getAllLines(String filename) throws IOException {
List<String> lines = new ArrayList<String>();
try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
String line = null;
while ((line = reader.readLine) != null) {
lines.add(line);
}
}
return lines;
}
Java 8 biedt een meer beknopte manier om dit te doen met behulp van de methode lines()
:
public List<String> getAllLines(String filename) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
return br.lines().collect(Collectors.toList());
}
return Collections.empty();
}
StringWriter-voorbeeld
Java StringWriter-klasse is een tekenstroom die uitvoer van tekenreeksbuffer verzamelt en waarmee een tekenreeks kan worden geconstrueerd.
De klasse StringWriter breidt de klasse Writer uit.
In de StringWriter-klasse worden systeembronnen zoals netwerksockets en bestanden niet gebruikt, daarom is het sluiten van de StringWriter niet nodig.
import java.io.*;
public class StringWriterDemo {
public static void main(String[] args) throws IOException {
char[] ary = new char[1024];
StringWriter writer = new StringWriter();
FileInputStream input = null;
BufferedReader buffer = null;
input = new FileInputStream("c://stringwriter.txt");
buffer = new BufferedReader(new InputStreamReader(input, "UTF-8"));
int x;
while ((x = buffer.read(ary)) != -1) {
writer.write(ary, 0, x);
}
System.out.println(writer.toString());
writer.close();
buffer.close();
}
}
Het bovenstaande voorbeeld helpt ons om een eenvoudig voorbeeld te kennen van StringWriter die BufferedReader gebruikt om bestandsgegevens uit de stream te lezen.