try (Scanner scanner = new Scanner(System.in);
var inputStream = Files.newInputStream(Paths.get(scanner.nextLine()));
var outputStream = Files.newOutputStream(Paths.get(scanner.nextLine()))
) {
byte[] buffer = new byte[1];
while (inputStream.available() > 0) {
int read = inputStream.read(buffer);
outputStream.write(buffer, 0, read);
MrPancho
14 уровень
Подскажите. Сколько символов можно считать и записать в файл, когда создаем 1 ячейку массива типа byte?
Обсуждается
Комментарии (13)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
NeverMore17
15 октября 2021, 21:27
Один символ
0
MrPancho Electrical engineer
15 октября 2021, 21:31
так я создавал файл с 1000 символами и программа работает , считывает и записывает в другой 1000 символов)
0
Ksenia Volkova Java Developer в DXC Master
15 октября 2021, 21:41
Просто ты 1000 раз записываешь по одному байту (что можно сделать и без буфера).
+1
MrPancho Electrical engineer
15 октября 2021, 21:49
а буфер тогда для каких случаев нужен? и количество ячеек массива
0
Ksenia Volkova Java Developer в DXC Master
15 октября 2021, 21:53
Буфер нужен, чтобы записывать байты не по одному, а сразу пачками - это будет эффективнее.
Размер может быть разный, зависит от разных обстоятельств. Чем больше будет массив, тем меньше итераций потребуется для чтения/записи. Но и памяти понадобится больше.
Представь, что тебе надо ведрами натаскать воды из колодца в бочку. Чем больше ведра - тем меньше раз надо будет ходить к колодцу. Но и тащить их будет тяжелее.
+1
MrPancho Electrical engineer
15 октября 2021, 21:59
А размер это тип например byte ? а byte[10] - типа 10 ведер ?
0
Ksenia Volkova Java Developer в DXC Master
15 октября 2021, 22:01
Нет. byte[10] - это ведро на 10 литров.
0
MrPancho Electrical engineer
15 октября 2021, 22:02
byte[] buffer = new byte[2];
//while (inputStream.available() > 0) {
int read = inputStream.read(buffer);
outputStream.write(buffer, 0,read);
//}
А , вот сейчас протестил этот код он записывает 2 символа всего, убрав цикл
0
Ksenia Volkova Java Developer в DXC Master
15 октября 2021, 22:03
Ну так ты цикл убрал. То есть ты со своим двухбайтовым ведром сходил к колодцу один раз - и все.
+1
MrPancho Electrical engineer
15 октября 2021, 22:04
за то вроде понял в чем суть), просто писал по разному и выводилось одно и тоже, хотел вот понять )
0
MrPancho Electrical engineer
15 октября 2021, 22:06
а какой максимальный размер ведра может быть у типа byte ? 2147483647 ?))
0
Ksenia Volkova Java Developer в DXC Master
15 октября 2021, 22:11
byte - это не ведро, а литры в этом ведре.
byte[10] - ведро на 10 байт
Тип зависит от потока чтения/записи, который ты используешь.
Если у тебя InputStream/OutputStream - то это байтовый поток. Он будет читтать и записывать байты (неважно, по одному или пачкой).
А если у тебя поток символьный (Reader/Writer), то он будет читать/записывать char - штучно или массивом.
А максимальное число ячеек в массиве любого типа - Integer.MAX_VALUE (2147483647)
+1
MrPancho Electrical engineer
15 октября 2021, 22:17
Спасибо большое за ответы ) хоть немного проясняется .
Буду разбираться чем символьный поток от байтового отличается)
0