Всем привет.
Задача - отсортировать байты.
Первый вариант решения рабочий, но валидатор не пропускает.
В первом варианте работаем с байтами:
Set<Byte> set = new TreeSet<>();
Scanner scanner = new Scanner(System.in);
FileInputStream file = new FileInputStream(scanner.nextLine());
byte[] array = file.readAllBytes();
for (byte el : array) {
set.add(el);
}
for (byte el : set) {
System.out.print(el + " ");
}
file.close();
Для меня не понятно каким образом результаты первого и второго варианта получаются одинаковыми.
Во втором варианте мы создаем множество Integer и добавляем в него file.read() (т.е. int) - вопросов нет
Set<Integer> set = new TreeSet<>();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
FileInputStream file = new FileInputStream(reader.readLine());
while (file.available() > 0) {
set.add(file.read());
}
for (int el : set) {
System.out.print(el + " ");
}
file.close();
Каким образом в результате выводятся байты, а не int. ?
Заранее благодарю за объяснение.
Anton
24 уровень
Как это работает?
Обсуждается
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia Volkova Java Developer в DXC Master
18 сентября 2021, 12:39полезный
Если в файле используются только символы ASCII, то значения int и byte для них будут одинаковыми.
+1
Anton
18 сентября 2021, 12:48
Обалдеть! Ксения, спасибо большое за комментарий! Очень ценю. Пришлось загуглять в "в чем отличие ASCII от unicode". + в копилочку знаний!
0
Alikhan
21 сентября 2021, 17:19
Получаетяс тут используется и юникод?
0
Anton
21 сентября 2021, 19:52
" Unicode-это надмножество ASCII, и числа 0–127 имеют то же значение в ASCII, что и в Unicode. Например, число 65 означает "латинская столица 'A'" "
Все основные латинские буквы, а также цифры и знаки, такие как точка, запятая и пр. описаны в таблице ASCII, а соответственно в Unicode.
Вопрос заставил меня поиграться с данными файла, и вот что я обнаружил:
если файл, имя которого мы вводим (можем создать обычный файл в формате txt (блокнот)), содержит латинские буквы и символы, то решение возвращает множество кодов ASCII под которыми эти символы записаны. Не знаю почему (глубоко не копал), но если в файле будет кириллица, то коды выводятся некорректные, хотя кириллица также присутствует в таблице ASCII.
0
ГоффMaster
21 сентября 2021, 20:08
Кириллица присутствует в расширенной ASCII, в основной её нет. Так как расширенных ASCII много, для каждого языка своя, то и придумали уникод, что бы можно было в единой кодировке символы всех языков отобразить.
+1
Alikhan
21 сентября 2021, 21:11
Смотрел сегодня видео, про инпут и аутпут, вроде дело в кодировке, UTF-8 вроде называется, которая выводит русские буквы из читаемого файла
само видео вроде это - https://www.youtube.com/watch?v=-MwbLywpV9U
Много чего разъяснилось, медиум задачи понял)
0