Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
43 / 43 / 15
Регистрация: 10.09.2013
Сообщений: 293
1

UTFDataFormatException: malformed input around byte 20

02.02.2014, 17:20. Показов 1812. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Раньше была такая проблема, но ее удалось решить путем использования метода readFully(), который считывал все байты из потока. Исключение происходит после выполнения этого метода 2 раз в этом месте:
Java
1
2
temp.setInformation(in.readInt(), in.readUTF(), in.readInt(), 
                        in.readInt(), in.readBoolean(), in.readUTF(), in.readUTF());
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
public ArrayList<ProductDetailsPanel> getFindProductForUser(String text){
        try {
            out.writeInt(ShopConstants.GET_FIND_PRODUCT_USER);
            out.writeInt(id);
            out.writeUTF(text);
            int count = in.readInt();
            ArrayList<ProductDetailsPanel> detailsPanelList = new ArrayList<>();
            for (int i = 0; i < count; i++) {
                ProductDetailsPanel temp = new ProductDetailsPanel(ShopConstants.ACCOUNT, this);
                temp.setInformation(in.readInt(), in.readUTF(), in.readInt(), 
                        in.readInt(), in.readBoolean(), in.readUTF(), in.readUTF());
                
                final int size_photo = in.readInt();
                byte arr[] = new byte[size_photo];
                in.readFully(arr);
                temp.setImage(arr);
                detailsPanelList.add(temp);
            }
            out.flush();
            
            return detailsPanelList;
        } catch (IOException ex) {
            Logger.getLogger(Content.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
Вот таким образом отправляю данные:
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
38
39
synchronized public void sendAboutProductFoundForUser() {
            try {
                int user_id = in.readInt();
                String text = in.readUTF();
                
                resultSet = statement.executeQuery(
                        "SELECT COUNT(*) count "
                        + "FROM (SELECT account_id, name "
                            + "FROM product "
                            + "WHERE account_id = " + user_id + ") e "
                        + "WHERE e.name LIKE '%" + text + "%'");
                if (resultSet.next()) {
                    out.writeInt(resultSet.getInt("count"));
                }
                resultSet = statement.executeQuery(
                        "SELECT p.id, p.name, p.price, p.count, p.availability, p.type, p.e_mail, p.image "
                        + "FROM (SELECT prod.id, prod.name, prod.price, prod.count, prod.availability, cw.type, ac.e_mail, prod.addtime, pi.image "
                            + "FROM product prod INNER JOIN product_images pi INNER JOIN class_weapons cw INNER JOIN account ac "
                            + "WHERE prod.class_weapons_id = cw.id AND prod.id = pi.product_id AND prod.account_id = " + user_id + ") p "
                        + "WHERE p.name LIKE '%" + text + "%' "
                        + "ORDER BY p.addtime DESC");
                while (resultSet.next()) {
 
                    out.writeInt(resultSet.getInt("id"));
                    out.writeUTF(resultSet.getString("name"));
                    out.writeInt(resultSet.getInt("price"));
                    out.writeInt(resultSet.getInt("count"));
                    out.writeBoolean(resultSet.getBoolean("availability"));
                    out.writeUTF(resultSet.getString("type"));
                    out.writeUTF(resultSet.getString("e_mail"));
                    byte b[] = resultSet.getBytes("image");
                    out.writeInt(b.length);
                    out.write(b);
                }
                out.flush();
            } catch (IOException | SQLException ex) {
                Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
Добавлено через 10 минут
Тему можно закрыть. Оказывается ошибка была в запросе к бд. Нужно было добавить еще одно условие в блок WHERE.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.02.2014, 17:20
Ответы с готовыми решениями:

java.io.UTFDataFormatException: malformed input around byte 1
Какая может быть причина возникновения этого исключения? Возникает при попытке считать методом...

Нельзя преобразовать тип function(a: byte;b: byte): byte к integer (Списки)
Создать список из целых чисел.Поменять в списке местами максимальный и минимальный элементы...

UnicodeDecodeError: 'utf8' codec can't decode byte 0x80 - invalid start byte
Добрый день При вызове скрипта вылетает такая ошибка: &quot;UnicodeDecodeError: 'utf8' codec can't...

'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
Работаю с библиотеками PIL и telebot В чем может быть проблема ? Ошибка - 'utf-8' codec can't...

1
2586 / 2259 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
02.02.2014, 19:44 2
прежде чем исправлять то что вы написали, рекомендую почитать про SQL иньекции ( inject ) и к чему это приводит
1
02.02.2014, 19:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.02.2014, 19:44
Помогаю со студенческими работами здесь

Перевести строку, содержащую данные массива байт (byte[]) в byte[]
Приветствую. Есть такая строка - &quot;&quot; Как её перевести в массив байт? 1. Допустим, что...

Invalid byte 1 of 1-byte UTF-8 sequence - ошибка (Intellij idea)
Есть небольшой проект, точнее, только зачаток, запускается нормально, но при сборке в jar ругается,...

преобразование ref byte в byte[] или в IntPtr без использования неуправляемого кода
есть COM интерфейс с методом: virtual /* */ HRESULT STDMETHODCALLTYPE OnReceivePacket( ...

Как перевести byte[] или переменную типа IntPtr к типу byte[] (ассемблерные инструкции)?
Наткнулась на проблему, нужно перевести тип IntPtr в массив ассемблерной инструкции. Вот пример...


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

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