Date: Fri, 10 Nov 2023 15:11:48 +0100
Subject: add new repo
---
.../hjp5/html/k100133.html | 260 +++++++++++++++++++++
1 file changed, 260 insertions(+)
create mode 100644 Master/Reference Architectures and Patterns/hjp5/html/k100133.html
(limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100133.html')
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100133.html b/Master/Reference Architectures and Patterns/hjp5/html/k100133.html
new file mode 100644
index 0000000..0ecb1a5
--- /dev/null
+++ b/Master/Reference Architectures and Patterns/hjp5/html/k100133.html
@@ -0,0 +1,260 @@
+
+
+
+Handbuch der Java-Programmierung, 5. Auflage
+
+
+
+
+
+
+
+
+
+
+
+
+20.3 Lesezugriffe
+
+
+
+
+
+Für die lesenden Zugriffe auf eine Random-Access-Datei stehen
+die folgenden Methoden zur Verfügung:
+
+
+
+
+
+
+
+
+
+
+public final boolean readBoolean()
+public final byte readByte()
+public final char readChar()
+public final double readDouble()
+public final float readFloat()
+public final int readInt()
+public final long readLong()
+public final short readShort()
+public final String readUTF()
+public final void readFully(byte[] b)
+public final void readFully(byte[] b, int off, int len)
+public final String readLine()
+public final int readUnsignedByte()
+public final int readUnsignedShort()
+
+
+ |
+
+java.io.RandomAccessFile |
+
+
+
+
+Sie lesen jeweils ein Element des angegebenen Typs und erwarten, dass
+es in der Datei in dem durch die korrespondierende write...-Methode
+vorgegebenen binären Format vorliegt. readFully
+kann dazu verwendet werden, beliebig viele Datenbytes ungeachtet ihres
+Datentyps einzulesen. readLine
+liest eine ganze Zeile Text aus und gibt sie als String
+an den Aufrufer zurück.
+
+
+Darüber hinaus steht auch eine Reihe von read-Methoden
+ zur Verfügung, die zum Einlesen eines
+einzelnen Bytes oder einer Menge von Bytes verwendet werden können:
+
+
+
+
+
+
+public int read()
+public int read(byte[] b)
+public int read(byte[] b, int off, int len)
+
+
+ |
+
+java.io.RandomAccessFile |
+
+
+
+
+Das folgende Listing zeigt die Verwendung der Klasse RandomAccessFile
+am Beispiel eines Programms, das die Signatur und Versionsnummer aus
+einem .class-File
+herausliest. Die Signatur einer Klassendatei ergibt das Wort »CAFEBABE«,
+wenn man die hexadezimale Darstellung der ersten vier Bytes ausgibt.
+In den nächsten beiden Bytes folgt die Minor-Versionsnummer und
+in den darauffolgenden zwei Bytes die Major-Versionsnummer. Die Versionsnummer
+liegt bis zum JDK 1.3 bei 45.3 und wurde mit dem JDK 1.4 auf 46.0
+geändert.
+
+
+Das Programm implementiert eine Klasse ClassFileReader,
+die den Zugriff auf die Klassendatei ermöglicht. Der Konstruktor
+öffnet die Datei, und die Ausgabe der Signatur und Versionsinformation
+erfolgt mit Hilfe der Methoden printSignature
+und printVersion.
+
+
+Das Einlesen der Signatur erfolgt durch Lesen der ersten 4 Byte der
+Datei, die dann jeweils in High- und Lowbyte zerlegt und in ihre hexadezimale
+Darstellung umgewandelt werden. Bei der Verwendung der Methode read
+zum Einlesen der Bytes ist zu beachten, dass der Rückgabewert
+vom Typ int
+ist. Er darf auch nicht in ein byte
+konvertiert werden, weil es sonst einen Vorzeichenüberlauf geben
+würde. Das Einlesen der Versionsnummern erfolgt mit der Methode
+readShort,
+die einen vorzeichenlosen 16-Bit-Wert aus der Datei liest. Auch hier
+ist der Rückgabewert vom Typ int,
+um den gesamten Wertebereich von 0 bis 65535 darstellen zu können.
+
+
+
+
+
+
+
+
+001 /* Listing2001.java */
+002
+003 import java.io.*;
+004
+005 class ClassFileReader
+006 {
+007 private RandomAccessFile f;
+008
+009 public ClassFileReader(String name)
+010 throws IOException
+011 {
+012 if (!name.endsWith(".class")) {
+013 name += ".class";
+014 }
+015 f = new RandomAccessFile(name,"r");
+016 }
+017
+018 public void close()
+019 {
+020 if (f != null) {
+021 try {
+022 f.close();
+023 } catch (IOException e) {
+024 //nichts
+025 }
+026 }
+027 }
+028
+029 public void printSignature()
+030 throws IOException
+031 {
+032 String ret = "";
+033 int b;
+034
+035 f.seek(0);
+036 for (int i=0; i<4; ++i) {
+037 b = f.read();
+038 ret += (char)(b/16+'A'-10);
+039 ret += (char)(b%16+'A'-10);
+040 }
+041 System.out.println(
+042 "Signatur...... "+
+043 ret
+044 );
+045 }
+046
+047 public void printVersion()
+048 throws IOException
+049 {
+050 int minor, major;
+051
+052 f.seek(4);
+053 minor = f.readShort();
+054 major = f.readShort();
+055 System.out.println(
+056 "Version....... "+
+057 major+"."+minor
+058 );
+059 }
+060 }
+061
+062 public class Listing2001
+063 {
+064 public static void main(String[] args)
+065 {
+066 ClassFileReader f;
+067
+068 try {
+069 f = new ClassFileReader("Listing2001");
+070 f.printSignature();
+071 f.printVersion();
+072 } catch (IOException e) {
+073 System.out.println(e.toString());
+074 }
+075 }
+076 }
+
+ |
+
+Listing2001.java |
+
+
+
+Listing 20.1: Lesen einer .class-Datei mit der Klasse RandomAccessFile