С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/89: Рейтинг темы: голосов - 89, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 27.11.2011
Сообщений: 24

Ошибка java.lang.IndexOutOfBoundsException

12.02.2012, 07:38. Показов 16941. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток всем читающим!
Помогите пожалуйста разобраться с проблемой следующего рода!
Вот это:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.regex.*;
import java.math.BigInteger;
 
public class InfinityIsHere{
    InfinityIsHere(){
        try{bufferIn = new FileInputStream(aFile);
            bufferOut = new FileOutputStream(twoFile);
            i=bufferIn.available();
            j=i;
            while(j>0){
                if((j-=b)<b)b=j;
                byte[] bb=new byte[b];
                bufferIn.read(bb,a,b);
                bufferOut.write(bb,a,b);
                a+=b;
            }
            bufferOut.close();
            bufferIn.close();
            }catch(Exception e){
            System.err.println("An exception "+e+" found");
        }
        
    }
    
    public static void main(String[] args){
        new InfinityIsHere();
    }
    BigInteger bInt;
    File aFile = new File("test.zip"), twoFile = new File("next.zip");
    FileInputStream bufferIn;
    FileOutputStream bufferOut;
    
    int i, j, a=0, b=0xF;
}
выдает ошибку java.lang.IndexOutOfBoundsException при a>0 вот в этом bufferIn.read(bb,a,b); месте.
При том что документация гласит:
read
public int read(byte[] b,
int off,
int len)
throws IOExceptionReads up to len bytes of data from this input stream into an array of bytes. This method blocks until some input is available.
This method simply performs in.read(b, off, len) and returns the result.


Overrides:
read in class InputStream
Parameters:
b - the buffer into which the data is read.
off - the start offset of the data.
len - the maximum number of bytes read.
Returns:
the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached.
Throws:
IOException - if an I/O error occurs.
See Also:
in
путем экспериментов установлено, что проблема снимается [bold]только[/bold] расширением массива (!), т.е. в любом случае, для того чтобы считать, например, пару байтов из конца гигабайтного файла нужно создавать массив под весь(!!!!!) файл 8-(.
Это что, глюк в программке или в JDK/JRE/документации?

PS.: в багах на http://java.sun.com/ я этого не нашел
WXPruSP2 + JDK 1.5.0
PPS.: Почему-то http://bugs.sun.com/bugdatabase сейчас не пашет...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.02.2012, 07:38
Ответы с готовыми решениями:

Java.lang.ClassCastException: MyBaza.Diag cannot be cast to java.lang.Comparable
Подскажите как исправить... Exception in thread &quot;AWT-EventQueue-0&quot; java.lang.ClassCastException: MyBaza.Diag cannot be cast to...

'fr.java': Ошибка #: 300 : method getObject(int) not found in class java.lang.String строка 33, символ 18
'fr.java': Ошибка #: 300 : method getObject(int) not found in class java.lang.String строка 33, символ 18

ошибка java.lang.OutOfMemoryError...
при генерации приложением pdf документа большого размера, происходит ошибка java.lang.OutOfMemoryError. подскажите пожалуйста как...

6
wind
12.02.2012, 10:02
Да... ГЛЮЧИЩЕ это, однозначно. В ГОЛОВЕ. Документацию надо читать, представлять хоть немного то, что пишешь. Зачем в коде следующая строка: [bold]a+=b[/bold]? Что означает конструкция [bold]if((j-=b)<b)b=j[/bold]?
0 / 0 / 0
Регистрация: 27.11.2011
Сообщений: 24
12.02.2012, 13:39  [ТС]
Цитата Сообщение от wind
Да... ГЛЮЧИЩЕ это, однозначно. В ГОЛОВЕ. Документацию надо читать, представлять хоть немного то, что пишешь. Зачем в коде следующая строка: [bold]a+=b[/bold]? Что означает конструкция [bold]if((j-=b)<b)b=j[/bold]?
Блин, ну умник! [bold]a=a+b[/bold] - Пойдет?
0
0 / 0 / 0
Регистрация: 27.11.2011
Сообщений: 24
12.02.2012, 14:01  [ТС]
В довесок к предыдущему!
Уважаемые! Я прошу просто подсказать объяснение поведения конкретного куска кода, а не обсуждать всю конструкцию, хотя если у вас время есть обсуждать черновой набросок, всегда готов...
;-)
Специально для wind
Java
1
2
3
4
5
6
7
                     while(j>0){
                            if((j-=b)<b)b=j;
                            byte[] bb=new byte[b];
                            bufferIn.read(bb,1,b);
                            bufferOut.write(bb,a,b);
                            a+=b;
                     }
выбивает на первом проходе, то-бишь, заменили 0 на единицу и все развалилось, чем это объяснить?
Можно даже так безо всяких смущающих незамутненный разум циклов:
Java
1
2
3
4
5
bufferIn.read(bb,0,b);
bufferOut.write(bb,a,b);
bb=new byte[b];
bufferIn.read(bb,15,b);
bufferOut.write(bb,a,b);
Эффект тот-же.
Мне интересно что я делаю не так, или что в системе не так сделано.
С уважением ко всем читающим k_lexx!
0
0 / 0 / 4
Регистрация: 14.08.2007
Сообщений: 307
12.02.2012, 15:43
> выбивает на первом проходе, то-бишь, заменили 0 на единицу и все развалилось, чем это объяснить?

Блин, "чем это объяснить" )
тебе же Runtime русским языком говорит "IndexOutOfBoundsException"
ты сдвигаешься от начала массива на величину "а" и пытаешься считать в него количество байт равное длине всего масива.
Куда по твоему последние "a" байт поместятся?
во тебе и "IndexOutOfBounds" ...
0
wind
12.02.2012, 16:52
ДА, УМНИК! В отличие от некоторых.

В данном коде не должно быть ни [bold]a += b[/bold], ни [bold]a = a + b[/bold]. А условие выхода из цикла - вообще что-то немыслимое.

Данные потока нормальные люди копируют так:
Code
1
2
3
4
5
byte[] buffer = ... ;
int readed;
while ((readed = inputStream.read(buffer)) > 0) {
  outputStream.write(buffer, 0, readed);
}
УМНИК, БЛИН.
0 / 0 / 0
Регистрация: 27.11.2011
Сообщений: 24
12.02.2012, 17:23  [ТС]
Да-а-а-а! %(
Не косячок, а КОСЯЧИЩЕ!
Спасибо хоть надоумили Идиота!

[bold]scroodge[/bold], [bold]wind[/bold] Sorry за отнятое время!
Спасибо!
PS.: Надо [bold]чаще [/bold] и [bold]больше [/bold] спать!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.02.2012, 17:23
Помогаю со студенческими работами здесь

Ошибка java.lang.ArrayIndexOutOfBoundsException
Возникает ошибка на 10 строке java.lang.ArrayIndexOutOfBoundsException при переводе массива в двумерный, ошибка в 1 из 10 случаев...

Ошибка java.lang.ArrayIndexOutOfBoundsException
Есть программа, которая считает корреляцию. Ей на вход подается файл csv, из которого она считывает значения и выполняет подсчет. Но если в...

Ошибка java.lang.NoClassDefFoundError
Имеется скомпилированыи класс. Но когда набираю комманду java classFileName програма не зупискается и компилятор видаёт ошибку: ...

Ошибка java.lang.NoClassDefFoundError
Помогите, пожалуйста. Ошибка выскакивает в тупом HelloWorld-е. Я уже попробовала кучу вариантов установки переменной classpath, но,...

AnyLogic Ошибка java.lang.runtimeexception
Помогите исправить ошибку


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru