Sie sollten es in eine Funktion wie diese einfügen:
public static int toInt(byte[] bytes, int offset) {
int ret = 0;
for (int i=0; i<4 && i+offset<bytes.length; i++) {
ret <<= 8;
ret |= (int)bytes[i] & 0xFF;
}
return ret;
}
Beispiel:
byte[] bytes = new byte[]{-2, -4, -8, -16};
System.out.println(Integer.toBinaryString(toInt(bytes, 0)));
Ausgabe:
11111110111111001111100011110000
Dies sorgt dafür, dass keine Bytes mehr zur Verfügung stehen und negative Bytewerte korrekt behandelt werden.
Mir ist keine Standardfunktion dafür bekannt.
Zu berücksichtigende Punkte:
Endianness: Verschiedene CPU-Architekturen ordnen die Bytes, aus denen ein Int besteht, in unterschiedlicher Reihenfolge an. Abhängig davon, wie Sie zunächst auf das Byte-Array gekommen sind, müssen Sie sich möglicherweise darüber Gedanken machen. und
Pufferung: Wenn Sie jeweils 1024 Bytes erfassen und eine Sequenz bei Element 1022 starten, erreichen Sie das Ende des Puffers, bevor Sie 4 Bytes erhalten. Es ist wahrscheinlich besser, einen gepufferten Eingabestream zu verwenden, der den gepufferten automatisch ausführt, sodass Sie ihn nur readByte()
wiederholt verwenden können und sich sonst keine Sorgen machen müssen.
Trailing Buffer: Das Ende der Eingabe kann je nach Quelle eine ungerade Anzahl von Bytes (nicht ein Vielfaches von 4) sein. Wenn Sie jedoch zunächst die Eingabe erstellen und ein Vielfaches von 4 "garantiert" (oder zumindest eine Voraussetzung) ist, müssen Sie sich möglicherweise nicht damit befassen.
Um den Punkt der Pufferung weiter zu erläutern, betrachten Sie Folgendes BufferedInputStream
:
InputStream in = new BufferedInputStream(new FileInputStream(file), 1024);
Jetzt haben Sie eine InputStream
, die automatisch 1024 Bytes gleichzeitig puffert, was viel weniger umständlich ist. Auf diese Weise können Sie glücklich 4 Bytes gleichzeitig lesen und müssen sich nicht um zu viele E / A sorgen.
Zweitens können Sie auch verwenden DataInputStream
:
InputStream in = new DataInputStream(new BufferedInputStream(
new FileInputStream(file), 1024));
byte b = in.readByte();
oder auch:
int i = in.readInt();
und mach dir int
überhaupt keine Sorgen darüber, s zu konstruieren .