Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 5
1

Метод write()

16.09.2016, 08:13. Показов 1833. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем. Прошу помощи разобраться с методом write в OutputStream. Почему выбрасывает ошибку IndexOutOfBoundsException,когда я пытаюсь записать вторую часть файла?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
 
        FileInputStream a = new FileInputStream(r.readLine());
        FileOutputStream b = new FileOutputStream(r.readLine());
        FileOutputStream c = new FileOutputStream(r.readLine());
 
        byte[] buffer = new byte[a.available()];
        while(a.available()>0)
        {
            int rs = a.read(buffer);
 
            b.write(buffer,0,(rs)/2);
            c.write(buffer,((rs)/2),rs);
 
        }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.09.2016, 08:13
Ответы с готовыми решениями:

Write a random text generator
Помогите мне выполнить задание: Write a random text generator. It shall take parameters: link...

TASK: Write a program that displays the multiplication table 10 by 10 as follows: 1 2 3 … 2 4 6 … 3 6 9 …
Write a program that displays the multiplication table 10 by 10 as follows: 1 2 3 … 2 4 6 … 3...

Метод половинного деления,хорд,ньютона,комбинированный метод
Добрый день. Помогите пожалуйста написать код на Java к функции: X^3 - 50cos(x) с интервалом -4 и...

Зависает метод PipeStream.Write
висит метод PipeStream.Write Method (Byte, Int32, Int32) ПРОВЕРИЛ Properties:...

9
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
16.09.2016, 09:01 2
потому что выходишь за границы массива.
0
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 5
16.09.2016, 09:22  [ТС] 3
не вижу где(
0
Эксперт Java
4093 / 3827 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
16.09.2016, 10:12 4
cube27, так поймайте исключение в отладчике и увидите, где именно.
В любой современной IDE можно поставить exception breakpoint - отладчик остановится именно в момент бросания исключения.
0
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 5
16.09.2016, 10:32  [ТС] 5
Нет,я понимаю, что проблема именно в строке c.write(buffer,((rs)/2),rs) , а еще конкретнее в ((rs)/2). Но если размер массива buffer умножить на 2,проблема уходит. Почему так происходит, не могу понять. Даже если взять фиксированные значения,отличные от нуля,то при изменении второго элемента c.write ,возникает ошибка.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
16.09.2016, 10:37 6
Ставишь брейкпоинт на 12 строке, вспоминаешь, что массивы индексируются с 0, смотришь, что пришло в rs, смотришь, чем равно rs/2, читаешь документацию на FileOutputStream.write
1
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 5
16.09.2016, 10:50  [ТС] 7
разобрался) спасибо.
0
Фрилансер
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
16.09.2016, 11:00 8
Лучший ответ Сообщение было отмечено cube27 как решение

Решение

Цитата Сообщение от cube27 Посмотреть сообщение
проблема именно в строке c.write(buffer,((rs)/2),rs)
Да
Цитата Сообщение от cube27 Посмотреть сообщение
а еще конкретнее в ((rs)/2)
Нет

Вас ведь не зря усиленно отсылают к документации. Вы, похоже, считаете, что в методе write задаются начало и конец буфера. А на самом деле там задаются начало буфера и его длина. Если от середины буфера шагнуть вперёд на полную его длину - что будет?
1
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 5
16.09.2016, 11:07  [ТС] 9
Где же ты раньше был,добрый человек)
0
Black Fregat
16.09.2016, 11:22     Метод write()
  #10

Не по теме:

Цитата Сообщение от cube27 Посмотреть сообщение
Где же ты раньше был,добрый человек)
Спал :)

0
16.09.2016, 11:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.09.2016, 11:22
Помогаю со студенческими работами здесь

Метод Write(string) класса StreamWriter обрезает строку.
Не могу разобраться, почему не работает вот такой код: using (Stream memoryStream = new...

чему когда используешь documen.write(...) на html странице этот метод затирает все содержимое страницы?
Почему когда используешь documen.write(...) на html странице этот метод затирает все содержимое...

Ошибка cannot write a property that has no write specifiers
TTabItem* newtab; newtab = new TTabItem(this); newtab->TabControl = TabControl1; //Тут ошибка...

В чём различие write() и write(' ')
В чём различие?: write(); write(' ');


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru