Есть ли способ изменить байты на целые при чтении из входного потока в Java? - PullRequest
1 голос
/ 28 октября 2011

Я читаю в файле с InputStream в байтовом массиве, а затем меняю каждый байт в int. Затем я храню int в другом массиве. Есть ли способ сделать это более эффективным? В частности, есть ли способ использовать только один массив вместо двух? Выделение обоих массивов занимает слишком много времени для моей программы.

Это то, что я сейчас делаю (is - это InputStream):

byte[] a = new byte[num];
int[] b = new int[num];

try {
    is.read(a, 0, num);
    for (int j = 0; j < nPixels; j++) {
        b[j] = (int) a[j] & 0xFF; //converting from a byte to an "unsigned" int
    }
} catch (IOException e) { }

Ответы [ 3 ]

0 голосов
/ 28 октября 2011

Давайте посмотрим ... вы не можете читать целые числа напрямую, поскольку они будут пытаться читать 4 байта за раз.Вы можете сказать

int_array[j] = (int)is.read();

внутри цикла, если вы в порядке чтения потока по одному байту за раз.

0 голосов
/ 28 октября 2011

Почему бы не использовать метод InputStream.read () без аргументов, который возвращает int?

File file = new File("/tmp/test");
FileInputStream fis = new FileInputStream(file);
int fileSize = (int) file.length(); // ok for files < Integer.MAX_SIZE bytes
int[] fileBytesAsInts = new int[fileSize];
for(int j = 0; j < fileSize; j++) {
    fileBytesAsInts[j] = fis.read();
}
0 голосов
/ 28 октября 2011

Вы просматривали DataInputStream или даже FileInputStream ?Есть еще много методов, которые позволяют вам читать определенные типы данных прямо из InputStream.

Я не знаю, возможно ли это в вашей ситуации только с предоставленной вами информацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...