>  기사  >  Java  >  J2ME 학습 - 입문부터 숙달까지 RMS 2

J2ME 학습 - 입문부터 숙달까지 RMS 2

黄舟
黄舟원래의
2016-12-19 13:56:041005검색


시리즈 1부에서는 기록관리시스템의 기본에 대해 집중적으로 다루었습니다. 레코드 관리 시스템을 사용하는 방법을 소개하기 전에 먼저 Java IO와 J2ME 플랫폼에서의 직렬화 구현을 소개하고 싶습니다. 위 내용은 레코드 관리 시스템과 MIDP의 일반 네트워킹 프레임워크 모두에 매우 중요합니다.
 
 CLDC에 정의된 Java IO는 매우 짧고 간결하지만 IO 작업을 완료하는 데 충분한 클래스도 제공합니다. 구현은 J2SE에 공통적이므로 J2ME를 사용하여 J2SE 또는 J2EE 플랫폼과 통신할 수 있습니다. 예를 들어, 인터넷을 통해 서블릿과 통신합니다. 기록에 관리 System에서 사용하는 주요 클래스는 ByteArrayInputStream, ByteArrayOutputStream, DataInputStream 및 DataOutputStream입니다. 처음 두 개는 바이트 기반입니다. ByteArrayInputStream은 바이트 배열을 스트림으로 변환하는 데 사용되는 반면 ByteArrayOutputStream은 메모리 버퍼의 데이터를 바이트로 변환하는 데 사용됩니다. 후자의 두 클래스는 Java 기본 데이터 유형 및 문자열 작업을 기반으로 합니다. 일반적으로 기본 데이터 유형과 문자열을 읽고 쓸 수 있도록 처음 두 클래스를 생성자에 매개 변수로 전달합니다. 한 가지 주목할 만한 점은 ByteArrayOutputStream의 toByteArray() 메서드가 메모리의 데이터를 복사하고 반환한다는 것입니다. 이로 인해 추가 메모리가 낭비됩니다. 제한된 저장 공간을 보다 효과적으로 사용하려면 ByteArrayOutputSteam 클래스를 확장하고 getByteArray( ) 메소드의 예는 다음과 같습니다.
 
 public class MyByteArrayOutputStream은 ByteArrayOutputStream을 확장합니다
 
 {
 
 public byte[] getByteArray()
 
 {
 
 return buf;
 
 }
 
 }
 
 J2ME에는 객체 직렬화 메커니즘이 제공되지 않지만 직접 구현할 수 있습니다. 다음 클래스를 고려하십시오.

public class Bank

{

PRivate StringbankName

private Stringphone; ;
 
 public Bank(){}
 
 public Bank(String aBankName,String aPhone,int aEmployeeNum)
 
 {
 
 this.bankName = aBankName ;
 
 this.phone = aPhone;
 
 this.employeeNum = aEmployeeNum;
 
 }
 
 public String getBankName()
 
 {
 
 반환 은행 이름 !=null?bankName:"";
 
 }
 
 public String getPhone()
 
 {
 
 반납 전화 ! =null?phone:"";
 
 }
 
 public int getEmployeeNum()
 
 {
 
  return EmployeesNum;
 
 }
 
 }
 
 객체 직렬화를 구현하기 위해 이 클래스에 두 가지 메서드를 추가합니다. 아래와 같이:
 
 public class Bank
 
 {
 
 private String BankName;
 
 private String Phone;
 
 private int EmployeesNum;
 
 public Bank(){}
 
 public Bank(String aBankName,String aPhone,int aEmployeeNum)
 
 {
 
 this.bankName = aBankName;
 
 this.phone = aPhone;
 
 this.employeeNum = aEmployeeNum;
 
 }
 
 public String getBankName()
 
 {
 
 반환 은행 이름 !=null?bankName:"";
 
 }
 
 public String getPhone()
 
 {
 
 반납 전화!= NULL? PHONE : "";

public int getemployeenum ()
{
return Employeenum;

}
 
 public byte[] serialize()에서 IOException 발생
 
 {
 
 ByteArrayOutputStream bos = new ByteArrayOutputStream();
 
 DataOutputStream dos = new DataOutputStream(bos);
 
 dos.writeUTF(getBankName());
 
 dos.writeUTF(getPhone());
 
 dos.writeInt(getEmployeeNum());
 
dos.flush();
 
return bos.toByteArray();
 
 ByteArrayInputStream bis = new ByteArrayInputStream(data);
 
 DataInputStream dis = new DataInputStream(bis);
 
 Bank myBank = new Bank();
 
myBank.bankName = dis.readUTF();
 
myBank.phone = dis.readUTF();

myBank.employeeNum = dis.readInt();

return myBank ;
 
 }
 
 }
 
이런 방식으로 객체의 직렬화를 달성했으며 사용이 매우 간단합니다. 직렬화 및 역직렬화 작업은 다음과 같습니다.

Bank aBank = .....

RecordStore rs = .....

try
 
 {
 
 byte[] data = aBank.serialize();
 
 rs.addRecord(data,0,data.length);
 
}
 
 catch(IOException e)
 
 {
 
 //뭔가
 
 }
 
 catch(RecordStoreException e)

 {
 
 //뭔가를 해라
 
 }
 
 ???????????????????????? ?
 
 byte[] 데이터 = ........;
 
 Bank aBank = null;
 
 try
 
 {
 
 aBank = Bank.deserialize(data); 🎜> 
Bank 클래스에서 우리 멤버는 모두 기본 데이터 유형과 문자열 유형이며 다른 객체에 대한 참조가 없다는 점에 주목할 가치가 있습니다. 이것이 가장 이상적이고 단순한 상황입니다. 사실 우리는 J2ME에 있습니다. 불필요한 문제를 피하기 위해 직렬화된 클래스를 설계할 때도 이렇게 해야 합니다.

위 내용은 J2ME 학습-RMS 입문부터 숙달까지의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.