Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как передавать русские символы по сети без Unicode, Как передавать меньше байтов? 
V
    Опции темы
maks991
Дата 8.8.2010, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 8.8.2010

Репутация: нет
Всего: нет



Значит, проблема такая. Пишу я болталку, чатик такой скромный. И нужно, конечно же, передавать сообщения, которые содержат русские символы. Так вот, очень хочется сократить количество передаваемых байтов, потому что русские символы в юникоде занимают аж 2 байта!
Принимаю сообщения я так:
Код

final int length = in.readInt();
final byte[] bytes = new byte[length];
int totalBytes = 0, currentBytes;
do
{
    currentBytes = in.read(bytes, totalBytes, length-totalBytes);
    totalBytes += currentBytes;
}
while (totalBytes < length);
String message = new String(bytes, "UTF-8");

А передаю вот так:
Код

String message = Message.makeMessage(type, nick, text);
byte[] b = message.getBytes("UTF-8");
out.writeInt(b.length);
out.write(b);
out.flush();

В общем, как видите, приходится использовать UTF-8, чтобы передавать русские символы и не получать на входе абракадабру. Но меня не устраивают эти 2 байта на символ. Помогите, пожалуйста, решить данную проблему...
Может быть, какую-то другую кодировку использовать, или хитрое что-то...я так и не смог осилить. Пытался вместо UTF-8 написать ASCII, думая, что таблица будет локальной и всё хорошо будет, но это не помогло...в телефоне отобразились квадратики вместо букв :(
В общем, такая вот проблема. Заранее спасибо за помощь.

Добавлено через 2 минуты и 10 секунд
Ну то есть очень бы хотелось, чтобы на русский символ приходился тот же 1 байт, как и на латинский. Если что, чат этот будет для двоих smile Телефоны у обоих Nokia, если это как-то влияет.
PM MAIL   Вверх
sanboll
Дата 8.8.2010, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 15.6.2010

Репутация: 1
Всего: 1



Чат через bluetooth или через http?
Можно использовать DataOutputStream.writeUTF(String UTF) и DataInputStream.readUTF() - там и размер данных указывать не придется
PM MAIL   Вверх
maks991
Дата 8.8.2010, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 8.8.2010

Репутация: нет
Всего: нет



Через StreamConnection. Я сокетами делаю. Ну да, знаю про эти методы. Но ведь количество передаваемых байтов всё равно не уменьшится :( Или уменьшится?

Добавлено через 12 минут и 53 секунды
Так-то есть аська...но я потому и делаю свою болталку, чтобы избавиться от всего лишнего, что мне в ней не нужно. И хочется уменьшить траффик, а то за счёт юникода не такой он маленький...
PM MAIL   Вверх
cutwater
Дата 8.8.2010, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: нет
Всего: 10



maks991, откройте для себя сжатие данных. Вас пугает два байта на символ? Вы уверены что это настолько критично в условиях современного мира. На дворе 2010 год.

Добавлено через 2 минуты и 20 секунд
Цитата(maks991 @  8.8.2010,  07:44 Найти цитируемый пост)
 Телефоны у обоих Nokia, если это как-то влияет. 


О мобильных устройствах сначала не приметил. Приношу извинения.
В принципе если вам кроме кирилицы и латиницы ничего не нужно, кодируйте однобайтными кодировками, CP1251 (Windows-1251) или KOI8-R, хотя как под мобильными устройствами дела обстоят с кодировками боюсь не осведомлен.


--------------------
user posted image
PM MAIL   Вверх
maks991
Дата 8.8.2010, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 8.8.2010

Репутация: нет
Всего: нет



Вот, и я про то же... Тоже думал использовать эти кодировки, но как-то не выходит :( Вот cp1251 должна быть прям точно, но как её пользовать правильно, не понимаю :(
PM MAIL   Вверх
maks991
Дата 8.8.2010, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 8.8.2010

Репутация: нет
Всего: нет



Вот мне, действительно, только кириллица и латиница нужна...явно можно обойтись одним байтом на символ... Попробовал вместо UTF-8 написать Cp1251, вообще не сработало.
PM MAIL   Вверх
cutwater
Дата 8.8.2010, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: нет
Всего: 10



maks991, string.getBytes("Cp1251") не?


--------------------
user posted image
PM MAIL   Вверх
maks991
Дата 8.8.2010, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 8.8.2010

Репутация: нет
Всего: нет



Нет, не сработало :(

Добавлено через 1 минуту и 46 секунд
На телефоне русский язык ведь полностью поддерживается...неужели только Unicode... Хотя вроде да, на некоторых моделях нет цп1251, только утф

Добавлено через 2 минуты и 20 секунд
Может как-то можно из юникода перевести в цп и обратно?

Добавлено через 3 минуты и 22 секунды
Правда для телефонов желательно поменьше всяких этих сложных преобразований, ресурсы-то ограниченные всё же
PM MAIL   Вверх
maks991
Дата 8.8.2010, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 8.8.2010

Репутация: нет
Всего: нет



Всё, товарищи, проблема решена. Причём решена тупейшим образом smile Сделал свою кодовую таблицу, где каждому символу приписал номерок и всё smile При отправке сообщения перевожу каждый юникодный символ в байт, согласно моей табличке, а при приёме обратно smile
Всем, кто пытался помочь, спасибо!
PM MAIL   Вверх
ivanovpv
Дата 8.8.2010, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Варвар
**


Профиль
Группа: Участник
Сообщений: 639
Регистрация: 26.1.2005
Где: Москва

Репутация: 10
Всего: 28



Цитата(maks991 @  8.8.2010,  17:08 Найти цитируемый пост)
Сделал свою кодовую таблицу, где каждому символу приписал номерок и всё

Ага вот так и плодятся кодовые страницы. Глядишь и появится своя кодовая страница и будем мы писать:
Код

 string.getBytes("CP-MAKS991");




--------------------
Aut viam inveniam aut faciam
PM MAIL Skype   Вверх
maks991
Дата 9.8.2010, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 8.8.2010

Репутация: нет
Всего: нет



Хаха, ну smile Ну тут пришлось просто...без этого нельзя smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0741 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.