файл в байт [] читается неправильно - PullRequest
0 голосов
/ 14 октября 2018

Я сохраняю / читаю массив байтов.Когда я печатаю сохраняемые байты, все они являются правильными значениями, но когда я читаю их, между каждым сохраненным байтом появляются 3 случайных отрицательных числа, и в конце байтов есть куча дополнительных случайных значений, и все отрицательные значенияцифры исчезли.

Считайте код:

byte[] tmpData = new byte[(int) file.length()];
try {
    tmpData = IOUtil.readFully(file);
} catch (IOException e) {
    e.printStackTrace();
}

IOUtil.readFully

public static byte[] readFully(File file) throws IOException {
    Checks.notNull(file, "File");
    Checks.check(file.exists(), "Provided file does not exist!");
    InputStream is = new FileInputStream(file);
    Throwable var2 = null;

    byte[] var8;
    try {
        long length = file.length();
        if (length > 2147483647L) {
            throw new IOException("Cannot read the file into memory completely due to it being too large!");
        }

        byte[] bytes = new byte[(int)length];
        int offset = 0;

        int numRead;
        for(boolean var7 = false; offset < bytes.length && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0; offset += numRead) {
            ;
        }

        if (offset < bytes.length) {
            throw new IOException("Could not completely read file " + file.getName());
        }

        is.close();
        var8 = bytes;
    } catch (Throwable var12) {
        var2 = var12;
        throw var12;
    } finally {
        $closeResource(var2, is);
    }

    return var8;
}

Код записи:

BufferedWriter writer = new BufferedWriter(new FileWriter(path, false));
int[] data = new int[] { 19,0,0,0,0,28,1,1,28,2,1,36,1,1,31,0,2,-1,0,2 }
for(int bytes : data) { writer.write(bytes); }

Считано байтов: 10, 0, 10, 0, 10, 0, 10, 0, 10, 28, 10, 1, 10, 1, 10, 28, 10, 2, 10, 1, 10, 36, 10, 1, 10, 1, 10, 31, 10, 0, 10, 2, 10, -17, -65, -65, 10, 0, 10 Пустая строка данных в файле (открыта с помощью Notepad ++), 0, 0, 0, 0, 28,1, 1, 28, 2, 1, $, 1, 1, 31, 0, 2, •, 0, 2 Ранее по какой-то причине считывались отрицательные числа, которые не были записаны в файл.

1 Ответ

0 голосов
/ 14 октября 2018

Просто используйте стандартную библиотеку (import java.nio.file.Files;).

byte[] tmpData = Files.readAllBytes(file.toPath());

и

Files.write(file.toPath(), bytes);
...