какие различия между windows и linux по поводу чтения FileInputStream?

например, размер файла составляет 1024 байта, этот размер одинаков в Windows и Linux. но когда я прочитал файл, как показано ниже

FileInputStream fileInputStream = new FileInputStream(file);

например, в окнах длина байтов равна 1026, но в Linux длина байтов равна 1024, или, наоборот, в окнах длина байтов равна 1024, но в Linux длина байтов составляет 1022, а в окнах длина байтов всегда больше, чем в Linux.

какие отличия?


person nofixing    schedule 03.09.2013    source источник
comment
stackoverflow.com/questions/ 17645 /   -  person    schedule 03.09.2013
comment
Я полагаю, что разница больше связана с файловыми системами, чем с операционными системами.   -  person Karthik T    schedule 03.09.2013
comment
вдовы? Это странно последовательная опечатка.   -  person Joachim Sauer    schedule 03.09.2013


Ответы (2)


Я предполагаю, что вы читаете текстовый файл, и этот файл был преобразован для использования новых строк Windows, которые \r\n вместо linux \n

Если вы пишете текст или двоичный код без преобразования, файлы будут содержать точно такие же байты и точно такое же количество байтов.

person Peter Lawrey    schedule 03.09.2013

Проблема, которую вы обнаруживаете, вероятно, больше связана с окончанием строк между Windows и Unix.

Поскольку вы должны читать файл в текстовом режиме, в Windows конец строки определяется двумя символами \r\n (представленными в шестнадцатеричном виде как 0x0A и 0x0D соответственно), тогда как в системах Unix он использует только \n.

Я сделаю безумное предположение и скажу, что ваш файл состоит из двух строк. В Windows он будет заменять \n на \r\n в конце каждой строки, создавая 2 байта, которых на самом деле не существует в исходном файле.

А в Linux при чтении файла, созданного в Windows, происходит обратное, съедая 2 байта.

person Havenard    schedule 03.09.2013
comment
но когда я анализирую файл в Linux, созданный файловой системой Windows, как проанализировать файл, а затем получить исходный файл axact? не проигрывая \ r \ n .. - person nofixing; 03.09.2013
comment
Вы должны читать его в двоичном режиме. Но я не программист на Java, поэтому не знаю, как это сделать на Java. - person Havenard; 03.09.2013
comment
FileInputStream находится в двоичном режиме, проблема в том, что файл был преобразован, когда вы передавали его между Windows и Linux. - person Peter Lawrey; 03.09.2013
comment
При передаче не конвертируется. - person Havenard; 03.09.2013