Ich habe diesen Artikel geschrieben, weil ich dachte, ich brauche etwas zum Lesen und Schreiben von Dateien, um eine neue Sprache zu erstellen. Es ist sehr vielseitig, also wenden Sie es bitte auf etwas an.
EAM ist eine Abkürzung für ** Execute Around Method **, was bedeutet, dass vor und nach einer Methode Speicher zugewiesen oder freigegeben wird. Insbesondere bei Verwendung externer Ressourcen (z. B. E / A) reicht der Garbage Collector (GC) allein nicht aus, und Sie müssen die Ressource schließen (z. B. close () von FileWriter). Es ist schwer in Worten zu verstehen, also schauen wir uns die Implementierung an.
Funktionale Programmierung mit Java -Java8 Lambda-Ausdruck und Stream-
Es ist ein Zitat aus
`Die in Java 8 hinzugefügte Stream-Klasse implementiert AutoCloseable. (...) Infolgedessen wurde AutoCloseable in eine lockere Vereinbarung "Ressourcen können geschlossen werden" geändert, anstatt der vorherigen strengen "Ressourcen müssen geschlossen werden" -Vereinbarung. (...) Dieser Code, der ARM verwendet, ist sehr präzise und attraktiv, aber Entwickler sollten daran denken, ihn zu verwenden. Wenn Sie diese elegante Syntax ignorieren, achten Sie nicht auf Ihren Code. Wenn Sie jedoch nach einer Möglichkeit suchen, Ressourcen rechtzeitig freizugeben und Entwicklerfehler in einer Fehde zu vermeiden, sollten Sie ARMs verwenden Wir müssen weiter gehen. ``
EAM.java
import java.util.*;
import java.io.*;
public class EAM{
private final FileReader fr;
private EAM(final String s) throws IOException{
fr = new FileReader(s);
}
public static void use(final String s,final Use<EAM,IOException> u) throws IOException{
final EAM eam = new EAM(s);
try{
u.accept(eam);
}finally{
eam.close();
}
}
private void close() throws IOException{
System.out.println("close()");
fr.close();
}
public void read(char[] c) throws IOException{
fr.read(c);
}
}
Obwohl es nur für Reader implementiert ist, ist es einfach, Writer zu implementieren.
Use.java
@FunctionalInterface
public interface Use<T,X extends Throwable>{
void accept(T t) throws X;
}
Ich habe den Konstruktor für den Fall privat gemacht, dass die Ressource außerhalb von use () geöffnet wird, obwohl ich versuche, die externe Ressource zu verwalten. Dadurch kann nur use () extern aufgerufen werden.
Main.java
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws IOException{
char[] c = new char[100];
EAM.use("eam.txt",eam -> eam.read(c));
for(char aChar:c) System.out.print(aChar);
}
}
Erstellen Sie eam.txt und geben Sie die Zeichenfolge ein oder geben Sie eine andere Datei an. Könnte die Zeichenfolge in der Datei gelesen werden? Wenn Sie Fragen haben, wenden Sie sich bitte.