summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100132.html
blob: 6db94d11a430e892774218f1ab5d312dddd29e08 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
<html>
<head>
<title>
Handbuch der Java-Programmierung, 5. Auflage
</title>
</head>
<body>
<a name="startofbody"></a>
<script language="JavaScript" src="hjp4lib.js">
</script>
<script language="JavaScript">
installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100130.html;106,k100131.html;107,k100133.html;108,k100136.html");
</script>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100130.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100131.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100133.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100136.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
<td align="right">Kapitel 20 - Random-Access-I/O
</table>
<hr>


<!-- Section -->
<a name="sectlevel2id020002"></a>
<h2>20.2 Navigation in der Datei </h2>
<hr>
<ul>
<li><a href="k100132.html#sectlevel2id020002">20.2 Navigation in der Datei</a>
<ul>
<li><a href="k100132.html#sectlevel3id020002001">20.2.1 Positionierung des Dateizeigers</a>
<li><a href="k100132.html#sectlevel3id020002002">20.2.2 Die L&auml;nge der Datei</a>
</ul>
</ul>
<hr>


<!-- Section -->
<a name="sectlevel3id020002001"></a>
<h3>20.2.1 <a name="ixa101397">Positionierung des Dateizeigers</a></h3>

<p>
Der Hauptunterschied zwischen dem sequenziellen und dem wahlfreien
Zugriff auf eine Datei besteht darin, dass beim wahlfreien Zugriff
mit einem <i>expliziten</i> Satzzeiger gearbeitet wird. Jeder Schreib-
und Lesezugriff erfolgt an der Position, die durch den aktuellen Inhalt
des Satzzeigers bestimmt wird, und positioniert den Zeiger um die
Anzahl gelesener bzw. geschriebener Bytes weiter. Die Klasse <a href="index_r.html#ixb101016"><font color=#000080><tt>RandomAccessFile</tt></font></a>
stellt verschiedene Methoden zum Zugriff auf den Satzzeiger zur Verf&uuml;gung:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public long getFilePointer()

public void seek(long pos)

public void skipBytes(int n)

public long length()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/io/RandomAccessFile.html" onClick="this.href=getApiDoc('java.io.RandomAccessFile')"><font color="#660066" size=-1>java.io.RandomAccessFile</font></a></td>
</tr>
</table>

<p>
<a name="ixa101398"><a href="index_g.html#ixb101055"><font color=#000080><tt>getFilePointer</tt></font></a></a>
liefert die aktuelle Position des Satzzeigers; das erste Byte einer
Datei steht dabei an Position 0. Da der R&uuml;ckgabewert vom Typ
<a href="index_l.html#ixb100245"><font color=#000080><tt>long</tt></font></a>
ist, unterst&uuml;tzt Java den Zugriff auf Dateien, die gr&ouml;&szlig;er
als 2 GByte sind, sofern es das Betriebssystem zul&auml;&szlig;t.

<p>
Das Positionieren des Satzzeigers erfolgt mit der Methode <a name="ixa101399"><a href="index_s.html#ixb101056"><font color=#000080><tt>seek</tt></font></a></a>
an die durch <font color="#000077"><tt>pos</tt></font> angegebene
Stelle. Anders als in C bezieht sich der Wert von <font color="#000077"><tt>pos</tt></font>
dabei immer auf den Anfang der Datei. Das Positionieren relativ zur
aktuellen Position kann mit der Methode <a name="ixa101400"><a href="index_s.html#ixb101057"><font color=#000080><tt>skipBytes</tt></font></a></a>
erledigt werden. Die neue Position wird dabei aus der aktuellen Position
plus dem Inhalt des Parameters <font color="#000077"><tt>n</tt></font>
berechnet. Auch negative Werte f&uuml;r <font color="#000077"><tt>n</tt></font>
sind dabei erlaubt und bewirken eine R&uuml;ckw&auml;rtsverschiebung
des Satzzeigers. 
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
Es ist erlaubt, den Satzzeiger hinter das derzeitige Ende der Datei
zu verschieben. Allerdings wird dadurch ihre tats&auml;chliche L&auml;nge
nicht ver&auml;ndert. Dies geschieht erst, wenn an der angesprungenen
Position tats&auml;chlich Zeichen geschrieben werden.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
<tr>
<td><font color="#FFFFFF">&nbsp;Hinweis&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
</tr>
</table>


<!-- Section -->
<a name="sectlevel3id020002002"></a>
<h3>20.2.2 Die L&auml;nge der Datei </h3>

<p>
Die Klasse <a href="index_r.html#ixb101016"><font color=#000080><tt>RandomAccessFile</tt></font></a>
besitzt zwei Methoden zum Zugriff auf die L&auml;nge der Datei: 
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public long length()
  throws IOException

public void setLength(long length)
  throws IOException
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/io/RandomAccessFile.html" onClick="this.href=getApiDoc('java.io.RandomAccessFile')"><font color="#660066" size=-1>java.io.RandomAccessFile</font></a></td>
</tr>
</table>

<p>
Mit <a name="ixa101401"><a href="index_l.html#ixb100275"><font color=#000080><tt>length</tt></font></a></a>
kann die derzeitige L&auml;nge der Datei bestimmt werden. Nach dem
&Ouml;ffnen einer bestehenden Datei liefert diese Methode deren initiale
L&auml;nge. Schreibzugriffe am Ende der Datei erh&ouml;hen diesen
Wert. Mit <a name="ixa101402"><a href="index_s.html#ixb101058"><font color=#000080><tt>setLength</tt></font></a></a>
kann die L&auml;nge der Datei ver&auml;ndert werden. Ist der als Argument
&uuml;bergebene Wert kleiner als die bisherige L&auml;nge, wird die
Datei verk&uuml;rzt. Ein eventuell dahinter stehender Dateizeiger
wird auf das neue Ende der Datei gesetzt. Ist das Argument gr&ouml;&szlig;er
als die bisherige L&auml;nge, wird die Datei vergr&ouml;&szlig;ert.
Der Wert der neu eingef&uuml;gten Bytes bleibt allerdings undefiniert,
bis sie explizit beschrieben werden. 
<hr>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
Wesley, Version 5.0.1
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100130.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100131.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100133.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100136.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
<td align="right">&copy; 1998, 2007 Guido Kr&uuml;ger &amp; Thomas
Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
</table>
<a name="endofbody"></a>
</body>
</html>