Ich arbeite mich durch einige Sonar Qube Berichte und repariere die Dinge, wo es angebracht ist. Ein Muster, das einige Kollegen in Bezug auf den Dateizugriff verwendet haben, besteht darin, eine RandomAccessFile
Instanz zu erstellen und daraus eine Channel
zu erhalten. Dieser Kanal kann an den aufrufenden Code zurückgegeben werden, dessen Aufgabe es dann ist, ihn zu schließen. Das Problem ist, dass es durch das Zurückgeben eines Kanals nicht möglich ist, das RandomAccessFile
Objekt zu schließen, das es erstellt hat - so beschwert sich Sonar.Ist es genug, um einen Kanal zu schließen oder RandomAccessFile zu schließen?
Ist es in Ordnung, einen Channel
zu schließen und den RandomAccessFile
zu ignorieren. Ich habe die RandomAccessFile#close()
Methode angeschaut und kann sehen, dass es den Kanal schließt, aber die Umkehrung ist nicht wahr.
würde Ein weiteres ähnliches Beispiel eine Klasse der einen Kanal von einem new RandomAccessFile(...)
und später in einem anderen Verfahren schließt hat die Channel
schafft aber keinen Hinweis auf die RandomAccessFile
gehalten. Soll der Code so geändert werden, dass ein Feld auf die Datei zeigt und stattdessen schließt? Oder ist es nicht wichtig?
Was macht der aufrufende Code mit dem Kanal? Kann die Methode, die RandomAccessFile() neu erstellt, mit dem Kanal arbeiten und die Informationen in einem POJO zurückgeben? Ich denke, es ist ein Anti-Pattern für die Weitergabe des Kanals, wenn das Schließen der Datei auch den Kanal schließt, aber das Schließen des Kanals kann die Datei möglicherweise nicht bereinigen. –
Das Schließen schließt entweder das andere. – EJP