Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
35 / 35 / 4
Регистрация: 28.11.2012
Сообщений: 164

У меня случаются ошибки. Как их избегать? пример с ObjectOutputStream

21.12.2012, 23:20. Показов 1519. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопросы в конце темы, можно сэкономить время можно прочитать сначала его.

Пишу приложение клиент сервер. Клиент присоединяется к клиенту образовывается соединение. После этого у сервера и у клиента есть объекты типа Socket. Если у клиента сокет соединить с OutputStream, то можно отправить серверу например строку. Сервер в свою очередь, соединяя InputStream с сокетом, может принять строку.

Вариант 1.1
Java
1
2
3
4
5
6
7
8
//Client
String str = "Привет серверу";
PrintWriter out = new PrintWriter(socket.getOutputStream());
out.println(str);
 
//Server
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
String str = in.readLine();
Можно написать и так:

Вариант 1.2
Java
1
2
3
4
5
6
7
8
9
10
11
//Client
String str = "Привет серверу";
PrintWriter out = new PrintWriter(socket.getOutputStream());
out.println(str);
 
PrintWriter outNew = new PrintWriter(socket.getOutputStream());//используя тот же сокет связываем его с НОВЫМ потоком и отправляем еще строку
outNew.println(str);
 
//Server
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
String str = in.readLine();
Затем мне понадобилось вместо PrintWriter и BufferedReader использовать ObjectInputStream и ObjectOutputStream, и я написал так:

Вариант 2
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//Client
String str = "Привет серверу по-новому"
ObjectOutputStream out = new ObjectOutputStream(users_socket.getOutputStream());
out.writeObject(str);
 
ObjectOutputStream outNew = new ObjectOutputStream(users_socket.getOutputStream());//еще раз используя тот же сокет, связываем его с НОВЫМ 
 
потоком и отправляем еще строку
outNew.writeObject(str);
//Компилятор компилирует
 
//Server
ObjectInputStream in = new ObjectInputStream(server.getInputStream());
Object obj = in.readObject();
String str = (String) obj;
Вопросы
Во втором варианте ошибка в том что нельзя определять два объекта ObjectOutputStream, можно только один, иначе работать не будет, но компилятор ошибку не выдаст. В тоже время использовать два объекта PrintWriter можно и все будет работать. Правда возникает ошибка во время работы программы invalid stream header.
Я ошибку в своей программе нашел методом проб и ошибок, вставляя где только можно System.out.println("123");

Как в дальнейшем не допустить появление таких ошибок. Как научится отличать какой объект можно два раза определять, а какой нет. В тех книгах которые я читал такие нюансы не описываются. Может Вы знаете где можно почерпнуть информацию не эту и подобного рода темы. У меня как новичка не редко попадаются такие ошибки на которые иногда по пол дня уходит.

Заранее благодарю.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.12.2012, 23:20
Ответы с готовыми решениями:

пример на файлы. у меня в коде есть ошибки, но я не знаю, как их исправить
по заданному списку фамилий напечатать каждому упомянутому в списке поздравление к определенному празднику. чтобы избежать шаблона,...

Поможет ли обновление до 2016-й версии избегать ошибки 3414?
На 2008 R2 возникает ошибка 3414. Поможет ли обновление до последней версии повысить надежность и избежать в будущем появления 3414-й...

У меня две ошибки по Базе данных: как мне их исправить
У меня две ошибки по Базе данных помогите мне пожалуйста их исправить заранее спасибо. 1.Индекс или ключ не может содержать...

2
35 / 35 / 4
Регистрация: 28.11.2012
Сообщений: 164
26.12.2012, 19:51  [ТС]
Неужели никто не знает? Как Вы справляетесь с подобным?
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
27.12.2012, 13:42
Всё очень просто. НИКАКОЙ объект не надо использовать параллельно, если Вы не знаете точно, что это не вызовет проблем. По умолчанию предполагается что проблемы будут (с вводом-выводом будут гарантированно), любое другое предположение требует подтверждения. Равно как подтверждения требует и само желание использовать объект параллельно. В Вашем случае это совершенно не обосновано.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.12.2012, 13:42
Помогаю со студенческими работами здесь

Как избегать конфликтов записи?
В форме при попытке, в зависимости от условия одного из полей, обновить значения базовой таблицы этой форме постоянно возникает сообщение о...

Как избегать NullPointerException и не наступать на грабли
Как избегать NullPointerException возникает в 27 строке, честно гуглил, но не нашел. не знаю что сделал не так, буду рад намеку =) ...

Пример с одного сайта у меня на сервере не работает
В учебнике: http://ru.html.net/tutorials/php/lesson5.php , я нашел вот такой пример: <html> <head> <title>Циклы</title>...

Пример из книги показал что у меня непонятки
Везде много написано о запаковке данных в один буфер для vertex array объектов. А вот так ведь можно, когда данные разделены на 2 буфера? ...

Дайте ссылку или пример на интересующий меня вопрос.
//Мне нужно сохранить информацию в массив структур FRAGMENT. //Сруктура выглит так: struct FRAGMENT { int counter; //...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru