Stud.kz – қазақ тілінде жазылған жұмыстар саны және сапасы бойынша біздің қор №1 болып табылады
JAVA ТІЛІ НЕГІЗДЕРІ
МАЗМҰНЫ
КІРІСПЕ 4
Курстық жұмысымның соңында AddressBook қосымшасының J2ME компиляторында жасалған,
1.JAVA ТІЛІ НЕГІЗДЕРІ 5
1.1 Java жаңа, арнайы жасалынған бағдарламалау тіл, платформа
1.2 Java виртуалды машина (JVM) 6
1.3 Java-да бағдарламалар жасауға қажетті комплект 6
1.4 Java тілінің деректер түрлері 9
1.5 Айнымалылар 10
2.ҰЯЛЫ ТЕЛЕФОНҒА ADDRESSBOOK ҚОСЫМШАСЫН JAVA ТІЛІНДЕ ОРЫНДАУ 12
2.1 Телефондарға арналған бағдарламалау орталары. Java 2 Micro
2.2 J2ME берілгендер форматы және структуралары. Обьектілер
2.3 Телефон мен компьютер байланысы 13
2.4 Эмуляторлар 16
2.5 Графикамен жұмыс 17
2.6 Массивтер 18
2.7 Примитивті түрлер 19
2.8 Ағымдарды ұйымдастыру және файлдармен жұмыс, InputStream класы.
2.9 AddressBook класы 20
2. 10 TEXTBox класы 22
2.11 Мәтін енгізу және жолдармен жұмыс 23
ҚОРЫТЫНДЫ 24
Қолданылған әдебиеттер тізімі: 25
BookReader текст мәтінін оқуға араналған қосымшасының программалық листингісі:
КІРІСПЕ
Менің бұл курстық жұмысымда Java программалау тілі пәні
Осы компилятормен қосымша құралық. Жұмыс барысындағы қиыншылықтар яғни
Ендігі мәселе сол қосымшамызды орһындайтын бағдарламаны яғни жанағы
Бағдарламамыз дайын, телефонымыз бар деп бастайық. Бұл AddressBook
Курстық жұмысымның соңында AddressBook қосымшасының J2ME компиляторында жасалған,
1.JAVA ТІЛІ НЕГІЗДЕРІ
1.1 Java жаңа, арнайы жасалынған бағдарламалау тіл, платформа
Алгоритмдерді жүзеге асыруда бастапқыда Algol тілі, ал кейін
Құрылымды бағдарламалауға үйретуде Pascal тілі қандай орын алса,
Java тілі Smalltalk, Pascal, C++ т.б тілдер негізінде
Сонымен, прораммалық қаматамас етуде Java тілі жаңа бастама
Қолданылатын процессордің (Intelx86, SunSPARC, PowerPC т.б) түрлерімен анықталатын
Java-ны жасаушылар жай тағы бір бағдарламалау тілді жасап
Java байт-кодтарға негізделген, ол деген қосымшалар модулі көптеген
Java-ны браузерлерді бағдарламалуға пайдалана бастады. Браузер WebRunner (HotJava
Java Beans (кофе дәндері) атты компонентерді жасау технологиясы
Серверлерді бағдарламалау технологиясы жұзеге асырылып сервлеттер (servlets) EJB
1.2 Java виртуалды машина (JVM)
Java тілінде қосымшалар арнайы, универсалды ортада орындалады, оның
Java тіліндегі кезкелген бағдарламаның бастапқы коды қарапайым тексті
1.3 Java-да бағдарламалар жасауға қажетті комплект
Java тілінде бағдарламалар жасауға қажетті минималды комплекітке мыналар
JRE (Java Runtime Environment) – орындау орта;
JDK (Java Development Kit) сәйкес платформаларға (J2SE, J2EE,
бағдарламалау орта (Eclipse, NetBeans, JBuilder, Visual Age, VisualCafe
Қазіргі уақытта үш Java-платформасы бар:
Java 2 Platform, Standard Edition (J2SE) – қарапайым
Java 2 Platform, Enterprise Edition (J2EE) – серверлік
Java 2 Platform, Micro Edition (J2ME) – аппаратты
Негізгі өнім (23 мамыр 1995 ж.):
JLS (Java Language Specification) – Java тіліді сипаттағыш
JVM-ды сипаттағыш. Ең алдымен виртуалды машиналар жасаушыларға арналған;
JDK – демонстрациялық мысалдардан, стандартты библиотекалардан және утилиттерден
Java-ның версиялары:
Java тілінің 1.0, 1.1, 2.0 версиялары бар. Соңғысы
Java-бағдарламасын жасауға арналған стандартты құралдардың бірнеше версиялары бар.
SDK (Software Development Kit) пакетінің құрылымы:
bin\ - программистің құрал-сайман каталогы;
demo\ - мысалда каталогы;
include\ - C,C++ бағдараламаларымен әрекеттестік үшін (include-old\ алдынғы
jre\ - пайдаланушының құрал-сайман каталогы;
jre\bin\ - Java-машинасы (JVM);
jre\lib\ - пайдаланушыға арналған Java библиотекасы + оңдеу
lib\ - програмистерге арналған Java библиотекасы
1.1-сурет - Java-бағдарламасының өмір циклы
Бастапқы Java-бағдарлама .java кеңістік (расширение) файлында болуы қажет.
Сегіз стандартты библиотекалар:
java.lang – кезкелген қосымшаның жұмыс істеуі үшін қажетті
java.util – көптеген пайдалы қосымша кластар;
java.applet – апплеттерді жасауға арналған кластар;
java.awt, java.awt.peer – пайдаланушының графикалық интерфейсін (GUI) жасауға
java.awt.image – Бейнелермен жұмыс жасауға арналған қосымша кластар;
java.io – файлдар және деректер ағанымен (streams) жұмыс
java.net – тораптармен жұмыс.
1.2-сурет - 1.4 версиясы технологиясының құрылымы
1.4 Java тілінің деректер түрлері
Java – қатаң түрленген тіл (strongly typed language).
Java тіліне еңгізілген барлық негізгі деректер түрлері екі
қарапайым түрлер (primitive types)
сілтеме түрлер (reference types)
Сілтеме түрлер (reference types) мыналарға бөлінеді:
массивтер (arrays);
кластар (classes);
интерфейстер (interfaces)
Қарапайым түрлер (primitive types) 8. Оларды мыналарға бөлуге
логикалық (кейде булев деп айтылады) boolean түрі;
7 санды (numeric);
Санды (numeric) түрлерге қатысты:
5 бүтін (integral) – byte, short, int, long,
2 бөлшек (floating-point) – float, double
Логикалық (boolean) түрі екі логикалық мәнге ие:
true (ақиқат)
false (жалған)
Логикалық boolean түрінің мәні салыстырмалар нәтижесінде пайдаболады, шартты
1.5 Айнымалылар
Айнымалылар бағдарламада деректерді сақтау үшін пайдаланылады. Басқаша айтқанда,
Айнымалымен жұмыс оны жариялаудан (declaration) басталады. Айнымалыны жариялау
Айнымалыны жариялауда final кілітті сөзі пайдалануы мүмкін. final-айнымалы
Кезкелген айнымалы үш негізгі сипаттамаларға ие:
аты – айнымалыны ерекше жалпылауыштайды және бағдарламада
түрі – айнымалы қандай шамаларды сақтай алатындығын
мәні – осы кезеңде айнымалыда сақталудағы ағымды шама
Айнымалыларды пайдалануда келесі тәртіптер мен нұсқаулар бар:
айнымалыны жариялауда оның түрін көрсету қажет;
айнымалыларды нақты мәндермен инициализациялау керек;
айнымалыларға сипаттама ат беру керек;
айнымалылардың аттары келесі талаптарға сәйкес болуы тиіс:
олар әріптерді, сандарды, $ белгісін және астын сызу
олар сандардан басталмауы тиіс;
айнымалы аты Java-ғы бірде бір кілітті сөздермен тура
айнымалылардың аттары әріптер регистрына сезімтал келеді;
айнымалылардың аттары бос орындарды (пробелы) құрамау керек
2.ҰЯЛЫ ТЕЛЕФОНҒА ADDRESSBOOK ҚОСЫМШАСЫН JAVA ТІЛІНДЕ ОРЫНДАУ
2.1 Телефондарға арналған бағдарламалау орталары. Java 2 Micro
Ендігі қарастыратын мәселе телефондарға арналған бағдарламалау орталары. Осының
2.1-сурет - J2ME коспиляторының терезесі
Осы суретте көрсетілген терезеде біз өзіміздің қосымшамызды орындаймыз.
2.2 J2ME берілгендер форматы және структуралары. Обьектілер
Java тілі обьекті бағытталған бағдарламалау тіліне жатады. Сондықтан
Төменде көрсетілгендей:
String str = new String (“some text”)
Обьект бірнеше конструктордан тұруы мүмкін. Конструктор шақырылған кезде
Енді кластардың мұрагерленуін қарастырайық. Берілген класс арқылы өзіміздің
Public class Graph extends Canvas
Java да басқа тілдермен салыстырғанда көптік мұрагерленуге тыйым
Төменде көрсетілгендей:
Public class Point extends Canvas implements Command listener
2.3 Телефон мен компьютер байланысы
Бұл платформа шектелген ресурстар мен жадылар және процессорлар
Ең бірінші қарастыратын мәселеміз, Java тілін оқи алатын
2.2 -сурет - Жаңа құрылғы терезесі
Керекті драйверімен дискті салып орнатамыз. Осыдан кейін драйвер
2.3-сурет - Құрылғылар диспетчері
Егерде сіз жаңа құрылғыны көрсеңіз онда драйвер құрылысы
Телефонымызды компьютерге қостық, ендігі қарастыратын мәселеміз мынадай. MobiMB
2.4-сурет - Телефон жадысы
Бұл сурет бізге телефон мен компьютердің нақты байланысын
Ендігі қарастыратын мәселе құрылған программаны телефонға орналастыру. Бұл
2.4 Эмуляторлар
Программамызды құру барысында бізге сол өнімді тексеріп өателерін
Эмуляторды өздігінен құратын болсақ ол директорий ішіндегі мына
Java ның мобилді варианты J2ME стандарты бар барлық
Енді қорыта келетін болсақ ұялы телефонымызға программа құру
Java технологиясы бар телефон табуымыз керек.
Windows операциялық жүйесі бар компьютер.
Телефон мен компьютер байланысын қамтамасыз ететін сымтетік.
Сондай - ақ компьютерімізде келесідей бағдарламалық қамтамасыздандырулар
Сымтетік драйвері.
Телефонға қосымшаны орнату программасы.
J2SE SDK (version 1.4.2) Java ортасы.
J2ME WTK құрылғылар жиыны.
Телефон моделінің эмуляторы, аса керек емес.
2.5 Графикамен жұмыс
Класс Canvas. Класс Canvas абстрактілі болып табылады.
Canvas класында абстрактілі тәсіл ол abstract void paintCGraphics
Graphics класы. Graphics класы төменгі дәрежелі графикалық суреттеуді
Ал енді Graphics класының жұмысына келер болсақ бірінші
1.int getClipHeight() – суреттеу облысының ұзындығын береді.
2.int getCl ipWidth() — суреттеу облысының енін береді.
Енді суреттеу облысының ені мен ұзындығын ала отырып
Бұл жерде ескере кететін жағдай, бүкіл экран бетіне
void setClip( int x. inty. int width, int
Суреттеу облысын анықтап алғаннан кейін ендігі мәселе берілген
void drawLinednt xl, intyl, intx2. inty2) —
void drawRect( int x. inty, int width, int
voiddrawRoundRect(intx. inty. intwidth, intheight, intarcWidth, intarcHeight) — дөңес
void drawArc( int x, inty, intwidth. intheight, int
Осылай геометриялық фигураларды түсіре аламыз. Бұл финураларды суреттеп
2.6 Массивтер
Оперативті жадының ұяшықарында орналасқан бір типті берілгендер массивтер
Массивтің анықталуы. Бұл этапта айнымалы мен массив типі
Int array[];
Image images[];
Массивті бергенде new операторы арқылы беріледі. Бұл жерде
Array= new int[50];
Images = new image[20];
Массивті инициялизациялау яғни берілген массивке мән беру. Әрбір
Array[0]=5;
Array[1]=10;
Маиссивтермен жұмыс істегенде оның неше көлеммен берілгеніне көп
2.7 Примитивті түрлер
Java обьектілі бағытталған бағдарламалау тілі болғандықтан обьект ретінде
Бұл типтердің маңызы толық және азэффектілі обьект құра
Төменде примитивті типтердің тізімі берілген яғни J2MЕ платформасына
byte 1 байт
short 2 байт
char 2 байт
int 4
long 8 байт
2.8 Ағымдарды ұйымдастыру және файлдармен жұмыс, InputStream класы.
Берілгендер мен қосымша арасындағы байланысты ұйымдастыратын класс ол
Ол келесідей шығару әдістерін береді:
int read ( ) – берілгендер ағымынан келесі
int read (byte[ ] b)- Ағымдағы берілгендерді буферге
int read ( byte [ ] b, int
int avai I abi е() – ағымдағы оқытылатын
void mark ( int read limit ) –
void close ( ) – ағымды жабады және
2.9 AddressBook класы
Біздің мақсатымыз ұялы телефон экранынан берілген текстік файлдарды
Font класынан бастайық. Бұл кластың мақсаты керекті шрифтті
Бұл әдістің параметрлері келесідей:
face - FACE_SYSTEM, FACE_MONOSPACE немесе FACE_PROPORTIONA
size - SIZE_SMALL, SIZE_MEDIUM немесе SIZE_LARGE осы константалардың
style - STYLE_PLAIN шрифт стилі осы константа
int getHeight() — шрифттердің биіктігін пикселдерде көрсетеді.
int charWidth(char ch) — шрифттердің енін ch
int charsWidth(char[] ch. i n t offset, int
int stringWidth(String str ) — str жолында жолдың
int substringWidthCString s t r , i n
BookCanvas класы берілген тексті көрсетеді. Page Index стегінде
Ағымдағы берілгендерді оқу үстінде келесідей ауытқулар беріледі:
EOFException — файл соңында құрылады.
IOException — енгізу және шығару функциясының базалық
Бағдарламамыздың мидлетінде BookCanvas класында обьект құру ғана қалды
2.5-сурет – Егер ішкі адрестік кітапша сізге унамаса,
2. 10 TEXTBox класы
TEXTBox класы Screen класының мұрагері болып табылады. Бұл
Төменде көрсетілген дол арқылы жүзеге асады:
Textox(StringTitle, Stringtext, intmaxsize, intconstraints)
Тағы бір ескере кететін мәселе бұл жерде терілетін
Мәтіндік аймақтың Textfield класы арқылы берілген шектеулері көрсетілген:
Any – барлық символдарды теруге мүмкіндік береді.
EMAILADDR – электрондық почта адесіне арналған мәтіндер.
NUMERIC – бүтін сандар енгізуге арналған.
PHONENUMBER – телефон номерлерін теруге арналған.
PASSWORD – жабық ақпараттарға ашылу кодын енгізгенде
URL – Интернет беттернің адрестеріне арналған URL
Мәтін текстін теруге арналған обьекті құрылғаннан кейін ол
Құрылған обьектімен жұмысты textbox класының әдістерімен жүзеге
void delete (int offset, int length) –
int getCaretPosition() – терудің ағымадғы пзициясының күйіне
int getchars(char[]data) – data символдық массивіне барлық тексті
int getConstraints() – мәтін аймағының шектемесін шақырады.
intgetMaxSize() – терілетін символдардың максималды мәнін қайтарады.
string getString() – терілген мәтінді жол
void insert(String src. Int Position) – position
void setChars(char[]data, intofset,intlength) – offset позициясынан бастап data
int setString (String text) – text параметрі арқылы
int size() – мәтін аймағында берілген символдар
2.11 Мәтін енгізу және жолдармен жұмыс
Бұл бөлімде біз қолданушымен стандартты байланыс құрылғыларын қарастырамыз.
ҚОРЫТЫНДЫ
AddressBook қосымшасы яғни ұялы телефоныңызға арналған адрестік кітапша
Java бағдарламалау ортасына қысқаша қорытынды анықтама берелік болсақ,
Қолданылған әдебиеттер тізімі:
Брюс Эккель. Философия Java. 3-е изд. СПб.: Питер,
Жерздев С. B.Java 2 Micro Edition. ИТЛаб, ННГУ,
Вартан Пирумян. Платформа программирования J2ME для портативных устройств.
Кен Арнольд, Джеймс Гослинг. Язык программирования JAVA. СПб.:
Е.Л.Буткевич. Пишем программы и игры для сотовых телефонов
Питер, 2006.
Использованы материалы порталов и форумов:
java.sun.com/j2me/docs
www.juga.ru
www.javagu.ru
http://servlets.chat.ru/
http://javapower.da.ru/
http://www.purejava.ru/
http://java.iba.com.by/
http://java7.da.ru/
http://codeguru.earthweb.com/java/
http://www.artima.com/
.
BookReader текст мәтінін оқуға араналған қосымшасының программалық листингісі:
// "AdressBook" прграммасының мысалы
import javax.microedition.midlet.MIDlet:
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.List;
import javax.microedition.lcdui.TextField;
import javax.microedition.lcdui.DateField;
import javax.microedition.lcdui.TextBox;
import java.util.Date:
import java.util.Calendar;
import java.io.ByteArrayOutputStream;
import java.io.ByteArraylnputStream;
import java.io.DataOutputStream:
import java.io.DatalnputStream:
import java.io.IOException;
import javax.microedition.rms.RecordStore;
import javax.mi croediti on.rms.RecordEnumerati on:
import javax.microediti on.rms.RecordComparator:
i mport java x. mi croedi ti on.
import javax.mi croedi ti on.rms.RecordStoreExcepti on;
public class AddressBook extends MIDlet implements CommandListener
{
private Display display;
private RecordStore recordStore; // Жазулардың
private List nameList;
private int redndexes[]:
private Command add,ok,next,back;
private TextBox tbName.tbPhone.tbEMail: // экрандар арасында өтудің
командалары
private Form dateForm:
private DateField dateField;
public void destroyApp(boolean destroy)
{
notifyOestroyedO;
public void startAppO {
try {
// "Address-Book" аттар тізімінің қоймасын ашу
recordStore = RecordStore.openRecordStoreC"Address-Book", true):
} catch (RecordStoreException rse) {}
// Дисплей менеджеріне сілтеме алу
display - Display.getDisplay(this);
// Командалардың объектілерін құру
ok = new Command("Ok". Command.OK. 1);
add " new CommandC'Add". Command.BACK, 1);
next • new Command("Next". Command.OK. 1);
back - new CommandC'Back", Command.BACK. 1):
// Ат енгізу аймағы
tbName = new TextBox("Name:"."".15,TextField.ANY);
tbName.addCommand(next);
tbName.addCommand(back):
tbName.setCommandListener(this);
// Телефон нөмерін енгізу аймағы
tbPhone - new TextBox( "Number:11."". 15. TextField.PHONENUMBER):
tbPhone.addCommand(next):
tbPhone.addCommand(back):
tbPhone.setCommandLi stener(this):
// Электрондық пошта енгізу аймағы
tbEMail - new TextBox("E-Mail:"."".35,TextField.EMAILADDR):
tbEMa i1.addCommand(next):
tbEMail.addCommand(back);
tbEMail.setCommandLi.tener(this):
// туған күн енгізуінің орны
dateField * new DateField("Birthday",DateField.DATE);
dateForm = new FormC"');
dateForm.append(dateField);
dateForm.addCommand(next):
dateForm.addCommand(back);
dateForm.setCommandListener(this):
// аттар тізімін құру,
BuildNameListO;
// Той иесін іздеу
String name • SearchBirthdayO:
// Егер ат табылған болса
if(name!=null) {
// Еске түсіргіш формасын құру
Form remindForm = new Form("Reminder");
// Еске түсіргішті формаға қосу
remindForm.append Сname + " has a birthday today!");
// қайтару командасын қосу
remindForm.addCommand(ok);
remi ndForm.setCommandLi stener (this);
// форманы көрсету
display.setCurrent(remindForm);
}
} else
// аттар тізімін экранда көрсету
di splay.setCurrent(nameLi st):
// SearchBirthday әдісі той иесінің атымен жолды қайтарып
// егер сол күні той иесі бомаса, онда
private String SearchBirthday(j {
String name ≫ null;
try {
// туған кундер объектісінің сүзгісін жасау
BirthdayFilter filter = new BirthdayFilterO;
// туған күнге лайық жазулардың тізімін алу
RecordEnumeratiop. re - recordStore.enumerateRecords(fiHer. null.
false):
// ID жазуларын алу
int id - re.nextRecordldO:
// ID туралы жазуларды алу
byte[] record • recordStore.getRecord(id):
ByteArraylnputStream bais = new ByteArraylnputStream(record);
DatalnputStream dis • new DataInputStream(bais);
name =-dis,readUTFC):
}
catch(RecordStoreException rse) {}
• catchdOException ioe) {}
return name:
private void BuildNameListО {
nameList = new ListC'Address-Book", List.IMPLICIT):
nameLi st.setCommandLi stener(this):
nameList.addCommand(add):
nameList.addCommand(ok):
try {
int size = recordStore.getNumRecordsO;
reclndexes - new int[size];
Alphabetical Ordering comparator = new AlphabeticalOrderingO:
RecordEnumeration re - recordStore.enumerateRecords(null, comparator.
false),:
int i=0:
while(true) {
int id = re.nextRecordldO; ,
reclndexes[i++]=id;
byte[] record - recordStore.getRecord(id);
ByteArraylnputStream bais=new ByteArraylnputStream(record);
DatalnputStream dis - new DatalnputStream(bais):
nameList.append(dis.readUTF().null):
catch(RecordStoreException rse)
catch(IOException ioe) {}
public void commandAction(Command с Displayable d) {
if(c==add)
display.setCurrent(tbName);
if(c—ok) {
if(d==namel_ist) {
try {
int id - recIndexes[nameList.getSelectedIndex()]:
byte[] record - recordStore.getRecord(id);
ByteArraylnputStream bais=new ByteArrayInputStream(record);
DatalnputStream dis = new DatalnputStream(bais);
Form infoForm = new Form(""):
infoForm.append(dis.readUTF()+"\n"):
infoForm.append(dis.readUTF()+"\n");
infoForm.append(dis.readUTFO);
Date birthday = new Date(dis.readLongO):
DateField df = new DateField("".DateField.DATE);
df.setDate(birthday):
infoForm.append(df);
i nfoForm.addCommand(ok);
i nfoForm.setCommandLi stener(thi s):
display.setCurrent(infoForm);
}
catch(RecordStoreException rse) {}
catch(IOException ioe) {}
} else {
display.setCurrent(nameList);
if(c==next) {
if(d==tbName) display.setCurrent(tbPhone);
if(d==tbPhone) display.setCurrentCtbEMail):
i f(d==tbEMai1) display.setCurrent(dateForm);
if(d==dateForm) {
ByteArrayOutputStream baos - new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
try {
dos.writeUTF(tbName.getStri ng()):
dos.writeUTF(tbPhone.getStringO);
dos.writeUTF(tbEMail.getStringO);
dos.wri teLong(dateFi eld.getDate().getTi me());
recordStore.addRecord(baos.toByteArray(). 0. baos.sizeO);
}
catchdOException ioe) {}
catch (RecordStoreException rse) {}
BuildNameListO:
display.setCurrent(nameList);
if(c==back) {
if(d==tbName) display.setCurrent(nameList);
if(d==tbPhone) display.setCurrent(tbName);
if(d--tbEMail) display.setCurrent(tbPhone):
if(d==dateForm) display.setCurrent(tbEMai1):
private class BirthdayFilter implements RecordFilter {
public boolean matches(byte[] candidate) {
ByteArraylnputStream bais = new ByteArraylnputStream(candidate);
DatalnputStream dis - new DatalnputStream(bais):
Date birthDate ≪ new Date'O;
try {
dis.readUTFO;
dis.readUTFO;
dis.readUTFO:
birthDate.setTi me(di s.readLong());
}
catch (IOExcepti.on ioe) { return false: }
Calendar rightNow • Calendar.getlnstanceO:
Calendar birthday = Calendar.getlnstanceO:
bi rthday.setTi me(bi rthDate);
i f(rightNow.get(Calendar.DAY_OF_MONTH)==
birthday.get(Calendar.DAY_OF_MONTH) &&
ri ghtNow.get(Ca1enda r.MONTH)—
bi rthday.get(Ca1enda r.MONTH))
return true;
else
return false;
private class Alphabetical Ordering implements RecordComparator {
public int compare(byte[] reel. byte[] rec2) {
ByteArraylnputStream baisl = new ByteArraylnputStream(recl);
ByteArraylnputStream bais2 = new ByteArrayInputStream(rec2):
DatalnputStream disl = new DataInputStream(baisl);
DatalnputStream dis2 = new DataInputStream(bais2);
String namel = null:
String name2 ≫ null:
try {
namel = disl.readUTF О :
name2 - dis2.readUTF ():
}
catch (IOException ioe) {}
int result = namel.compareTo(name2):
if (result < 0)
return RecordComparator.PRECEDES;
else
if (result == 0)
return RecordComparator.EQUIVALENT;
else
return RecordComparator.FOLLOWS;
}
30