43 / 43 / 15
Регистрация: 10.09.2013
Сообщений: 293
1

java.io.UTFDataFormatException: malformed input around byte 1

20.01.2014, 00:10. Показов 2961. Ответов 6
Метки нет (Все метки)

Какая может быть причина возникновения этого исключения? Возникает при попытке считать методом readUTF() с сети текстовых данных. Возникает через раз и в разных частях программы. Вот последняя точка возникновения исключения:
Java
1
String name = 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> getAboutProduct(String type) {
        try {
            int count = getCountProduct(type);
            out.write(ShopConstants.GET_PRODUCT);
            ArrayList<ProductDetailsPanel> detailsPanelList = new ArrayList<>();
            out.writeUTF(type);
            for (int i = 0; i < count; i++) {
                ProductDetailsPanel temp = new ProductDetailsPanel();
                int id = in.readInt();
                String name = in.readUTF();
                int price = in.readInt();
                int count1 = in.readInt();
                boolean b = in.readBoolean();
                int size = in.readInt();
                byte arr[] = new byte[size];
                in.read(arr);
                temp.setInformation(id, name, price, count1, b, type);
                temp.setImage(arr);
                detailsPanelList.add(temp);
            }
            return detailsPanelList;
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        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
synchronized public void sendAboutProduct() {
            try {
                String type = in.readUTF();
                if (type.equals("all")) {
                    resultSet = statement.executeQuery(
                            "SELECT p.id, p.name, p.price, p.count, p.availability, pi.image "
                            + "FROM product p INNER JOIN product_images pi "
                            + "WHERE p.id = pi.product_id "
                            + "ORDER BY addtime DESC");
                } else {
                    resultSet = statement.executeQuery(
                            "SELECT p.id, p.name, p.price, p.count, p.availability, pi.image "
                            + "FROM product p INNER JOIN product_images pi "
                            + "WHERE p.id = pi.product_id AND type = '" + type + "' "
                            + "ORDER BY addtime DESC");
                }
                int i = 0;
                while (resultSet.next()) {
                    System.out.println((++i));
                    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"));
                    byte b[] = resultSet.getBytes("image");
                    out.writeInt(b.length);
                    out.write(b);
                }
            } catch (IOException | SQLException ex) {
                Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2014, 00:10
Ответы с готовыми решениями:

UTFDataFormatException: malformed input around byte 20
Раньше была такая проблема, но ее удалось решить путем использования метода readFully(), который...

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

Byte в java
Здравствуйте! Почему при преобразовании int s = 250; System.out.println((byte)s); в...

Тип byte[] в java
Всем привет! Разбираюсь с работой с файлами в Java. И в коде встретил такую запись private byte...

6
Эксперт Java
4075 / 3809 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
20.01.2014, 14:02 2
Может у вас количество записей не совпадает? Т.е. count в получателе != количеству записей, которые вернул resultSet.
0
43 / 43 / 15
Регистрация: 10.09.2013
Сообщений: 293
20.01.2014, 15:51  [ТС] 3
Цитата Сообщение от turbanoff Посмотреть сообщение
Может у вас количество записей не совпадает? Т.е. count в получателе != количеству записей, которые вернул resultSet.
Нет, все совпадает, ошибка в другом.
0
Эксперт Java
4075 / 3809 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
20.01.2014, 16:42 4
А на какой итерации возникает ошибка? Чему равно i, в момент выпадения исключения?
0
43 / 43 / 15
Регистрация: 10.09.2013
Сообщений: 293
20.01.2014, 16:50  [ТС] 5
Нашел в чем проблема, но баг не исправил. Все работает идеально если не отправлять по сети байти, т.е. опустить эту часть кода:
Java
1
2
3
byte b[] = resultSet.getBytes("image");
out.writeInt(b.length);
out.write(b);
Нужно переделать отправку и прием массива байт.

Добавлено через 6 минут
Цитата Сообщение от turbanoff Посмотреть сообщение
А на какой итерации возникает ошибка? Чему равно i, в момент выпадения исключения?
После первой итерации, как раз после записи массива байт в поток.
0
Эксперт Java
4075 / 3809 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
20.01.2014, 19:01 6
Скорее всего будет достаточно заменить in.read(arr) на in.readFully(arr)
2
2000 / 1423 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
20.01.2014, 19:48 7
Цитата Сообщение от turbanoff Посмотреть сообщение
Скорее всего будет достаточно заменить in.read(arr) на in.readFully(arr)
Или написать правильное вычитывание всего буфера, а не только его части.

1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2014, 19:48

Помощь в написании контрольных, курсовых и дипломных работ здесь.

С# BitmapImage byte[] to java Bitmap
Изображение класса BitmapImage (можно переделать и в System.Drawing.Bitmap - но я уверен не...

Пустой байт в byte Java Jssc
public static String code; public static int i = 0; public static int q = 0; public...

input в java
только начала учить джаву,вот интересно,есть ли в ней cin как в С++,то есть могу ли я вводить сама...

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.