Bedeutet dies, dass das Byte-Array leer war?
NO - das ist no't einen Fehler
Blick auf read (byte []) Methode aus Definition:
public abstract class InputStream extends Object implements Closeable {
/**
* Reads up to {@code byteCount} bytes from this stream and stores them in
* the byte array {@code buffer} starting at {@code byteOffset}.
* Returns the number of bytes actually read or -1 if the end of the stream
* has been reached.
*
* @throws IndexOutOfBoundsException
* if {@code byteOffset < 0 || byteCount < 0 || byteOffset + byteCount > buffer.length}.
* @throws IOException
* if the stream is closed or another IOException occurs.
*/
public int read(byte[] buffer, int byteOffset, int byteCount) throws IOException {
....
}
}
so, was die IDE anzeigt ? ist das Sie das Ergebnis der Lesemethode - was ist die Anzahl der tatsächlich gelesenen Bytes oder -1, wenn das Ende des Streams erreicht wurde.
Wie zu beheben?
wenn u egal, wie viele Bytes Byte-Puffer gelesen wurden:
// define variable to hold count of read bytes returned by method
int no_bytes_read = re.read(encodedKey);
warum sollten Sie darauf ???
- , denn wenn man aus dem Strom lesen Sie als Parameter sind vorbei häufig speziell ein Puffer, wenn Sie nicht wissen, die Größe der Daten durch den Strom getragen wird, oder Sie wollen durch Abschnitte lesen (in diesem Fall, dass Sie vorbei Byte Array der entschlüsseltenBufferSize-Größe ->neues Byte [decryptBuferSize]).
- am Anfang des Byte-Puffer (Byte-Array) ist leer (mit Nullen aufgefüllt)
- Methode read()/Lese (byte []) ein oder viele Bytes lesen viele aus dem Strom
- bewusst zu sein, wie Bytes wurden "mapped/read from stream to buffer" Sie müssen das Ergebnis der read (byte []) Methode erhalten, dies ist nützlich, da Sie den Inhalt des Puffers nicht überprüfen müssen.
- noch an einem gewissen Punkt müssen Sie die Daten aus dem Puffer erhalten/dann müssen Sie den Anfang kennen und
zum Beispiel in einem Puffer der Daten-Offset Ende:
// on left define byte array = // on right reserve new byte array of size 10 bytes
byte[] buffer = new byte[10];
// [00 00 00 00 00 00 00 00 00 00] <- array in memory
int we_have_read = read(buffer); // assume we have read 3 bytes
// [22 ff a2 00 00 00 00 00 00 00] <- array after read
have we reached the end of steram or not ? do we need still to read ?
we_have_read ? what is the value of this variable ? 3 or -1 ?
if 3 ? do we need still read ?
or -1 ? what to do ?
ich Sie ermutigen, lesen Sie mehr über io und nio api
http://tutorials.jenkov.com/java-nio/nio-vs-io.html
https://blogs.oracle.com/slc/entry/javanio_vs_javaio
http://www.skill-guru.com/blog/2010/11/14/java-nio-vs-java-io-which-one-to-use/