- •Что Вам необходимо?
- •Создание miDlet-а
- •О том, что скрыто от наших глаз
- •А дальше?
- •Ресурсы
- •Инсталяция и запуск Tomcat
- •Написание исходного кода Servlet-а
- •Компиляция Servlet – а
- •Развертывание Servlet-а
- •Как обратиться к Servlet-у из miDlet-а
- •Замечания
- •Заключение
- •Дейтаграммы
- •Получение Web контента
- •Когда какой протокол использовать?
- •Стек протоколов
- •Профили
- •Bluetooth устройства и сети
- •Системные требования
- •Java api For Bluetooth — организация и пакеты
- •Анатомия miDlet-ов, использующих jsr 82
- •Использование Java apIs for Bluetooth
- •Использование Bluetooth в j2me приложениях. (jsr-82) - Часть 2. Обзор Connection и Device Management api Обзор Connection api
- •Типы Bluetooth соединения
- •Создание соединения
- •Ожидание соединения
- •Отправка и получение даннях
- •Обзор Device Management api
- •Удаленное устройство
- •Класс устройства
- •Получение информации о настройках Bluetooth устройства
- •Интерфейсы pim api
- •Классы pim api
- •Использование pim api
- •Использование эмулятора j2me Wireless Toolkit 2.2 для тестирования pim списков
- •Особенности спецификации Sony Ericsson
- •Свойства системы
- •Классы и интерфейсы FileConnection api
- •Операции ввода/вывода
- •Получение информации о файлах и каталогах
- •Вычисление Экспоненты
- •Гиперболические функции
- •Вычисление натурального логарифма
- •Вычисление арксинуса и арккосинуса
- •Вычисление арктангенса
- •Обзор mmapi
- •Механизм обработки мультимедмйной информации
- •Mmapi пакеты
- •Использование mmapi
- •Последовательности нот
- •Проигрывание мультимедийных файлов
- •Воспроизведение видео
- •Использование камеры
- •Поддерживаемые форматы
- •Ограничения использования mmapi в wtk
- •Пример простого медиаплеера
- •Создание midp приложения с использованием Visual Designer-а.
- •Редактирование Java исходников
- •Создание midp приложений с использованием Source Editor Создание нового j2me midp проекта
- •Редактирование Java исходников
- •Компиляция и запуск проекта
- •Выбор платформы эмулятора
- •Использование конфигурирования
- •Добавление конфигурации
- •Настройка конфигурации
Операции ввода/вывода
Если Вам уже приходилось работать с GCF, то вы хорошо знакомы с операциями чтения и записи в файл. Для записи необходимо получить OutputStream с помощью объекта FileConnection, указывающего на необходимый файл:
OutputStream os = fc.openOutputStream()
os.write(new String("hello").getBytes());
os.close();
Если вы хотите писать в файлы данные в форме какого-нибудь Java типа, можете воспользоваться объектом DataOutputStream:
int i = 1234;
DataOutputStream ds = fc. openDataOutputStream();
ds.writeInt(i);
ds.close();
Для чтения из файла необходимо получить InputStream или DataInputStream.
byte[] b = new byte[1024];
InputStream is = fc.openInputStream();
is.read(b);
is.close();
Получение информации о файлах и каталогах
Класс FileConnection имеет несколько методов, которые используются для получения информации о файле и каталоге:
boolean canRead() — доступен ли файл для чтения;
boolean canWrite() — доступен ли файл для записи;
long directorySize(boolean includeSubDirs) — возвращает размер всех файлов находящихся в папке (в байтах);
long fileSize() — возвращает размер файла в байтах;
long lastModified() — возвращает дату последней модификации файла или каталога.
Завдання
Проробити практичний матеріал, розглянутий в лабораторній роботі.
Розробити власну программу що зберігає довільний файл в телефоні у вибранний каталог.
Відповісти на питання:
1) Як можна переконатися, що система підтримує FileConnection API?
2) Який метод дозволяє переконатися в існуванні вибраного файлу?
3) Як можна отримати перелік файлів будь-якого формату (наприклад, mp3) у вібраному каталозі?
Лабораторная работа №6
Вычисление математических функций в j2me (exp, ln, log, arcsin, arccos, arctn, power, root)
Конфигурация CDLC 1.1 позволяет работать с вещественными числами, поддерживая тип double. Однако стандартная библиотека Math включает в себя очень скудный набор математических функций: sin, cos, tan, sqrt. Существует несколько сторонних математических классов (например, Real.java, которую можно скачать по адресу http://sourceforge.net/projects/real-java). В этой лабораторной работе я предлагаю написать собственную реализацию нескольких популярных математических функций.
В основе компьютерной математики лежит использование разложений функций в математические ряды. Подробно этот вопрос рассматривается в курсе Математического анализа любого Вуза. Если вкратце, то математическую функцию можно представить в виде бесконечной суммы слагаемых, причем каждое следующее слагаемое по модулю меньше предыдущего. Поэтому для вычисления функции с заданной точностью нужно выполнять сложение до тех пор, пока следующее слагаемое не станет меньше, чем требуемая точность вычисления.
Вычисление Экспоненты
Из курса математического анализа известно, что экспоненту можно представить в виде бесконечного ряда
При этом, чем больше аргумент x, тем больше слагаемых требуется брать для удовлетворения требуемой точности. При x>706 exp(x) не умещается в переменную типа double, поэтому перед вычислением экспоненты целесообразно проверить значение x на превышение порогового предела. Для реализации эффективного алгоритма вычисления экспоненты, нужно воспользоваться известным из курса школьной алгебры фактом:
Очевидно, число x<706 можно представить в виде суммы:
где коэффициенты a могут принимать значения 0 или 1, а b<1.
Величины можно вычислить заранее и записать в массив. Затем вычленить из x целую(b) и дробную часть. Для дробной части вычислить экспоненту как сумму ряда Тейлора. Найти ai можно, переведя целую часть числа x в двоичную систему. Тогда самому правому символу в двоичном представлении числа соответствует a0, второму справа числу – a0, и так далее. Ниже приведен код функции, вычисляющей экспоненту числа:
private double MExp(double x0){
double x=x0;
if (x0<0){x=-x0;}
//Массив со степенями экспоненты.
double ExpConst[]={
2.718281828459045, //e^1
7.389056098930649, //e^2
54.59815003314422, //e^4
2980.957987041726, //e^8
8886110.520507860, //e^16
78962960182680.61, //e^32
6.235149080811582e27, //e^64
3.887708405994552e55, //e^128
1.511427665004070e111, //e^256
2.284413586539655e222 //e^512
};
int x1=(int)x; //Выделяем целую часть числа
//Вычисляем экспоненту как сумму ряда Тейлора
int long n=1;
double b=1;
double sn=1;
while (sn>1E-16){
sn=sn*(x-x1)/n;
b=b+sn;
n=n++;
}
//Переводим показатель экспоненты в двоичную систему.
StringBuffer s1=new StringBuffer(10);
s1.append(Integer.toBinaryString(x1));
int len=s1.length();
for (int i=s1.length(); i>0;i--)
{
if (s1.charAt(i-1)=='1'){b=b*ExpConst[len-i];}
}
if (x0<0){b=1/b;}
return b;
}