ABSTRACT
GIỚI THIỆU
Khi đã
quen thuộc với các trường (thuộc tính) của đối tượng
cũng như các thẻ trong định dạng XML (eXtensible Markup
Language), một câu hỏi đặt ra cho người lập trình là
cấu trúc của đối tượng có tương tự cấu trúc của
XML hay không, và nếu tương tự thì cách chuyển đổi
giữa chúng như thế nào. Đối tượng và XML có những
điểm mạnh và yếu riêng, nhiệm vụ của lập trình viên
là tìm thấy được những điểm mạnh và liên kết chúng
lại với nhau. Một chiếc cầu nối tốt giữa đối tượng
và XML là một chiếc cầu tận dụng được tối đa khả
năng lưu trữ đối tượng xuống hệ thống tập tin cũng
như phát huy tốt nhất khả năng lưu trữ dữ liệu của
tập tin XML. Đối tượng có thể được lưu giữ lại
một cách dễ dàng thành định dạng XML, và từ XML ta có
thể lấy lại đối tượng đó bất cứ lúc nào.
Bài viết
nhằm giới thiệu XStream, một thư viện xây dựng sẳn
viết bằng ngôn ngữ Java, để chuyển đổi đối tượng
sang định dạng XML và ngược lại. Hơn nữa, XStream còn
được dùng minh họa việc đọc và ghi dữ liệu hướng
đối tượng có sử dụng tiếng Việt xuống hệ thống
tập tin. Bài viết còn chú trọng đến việc tạo chuỗi
tiếng Việt trong JBuilder IDE và Eclipse IDE.
SỬ
DỤNG XSTREAM CHUYỂN ĐỔI CHUỖI CÓ ĐỊNH DẠNG XML THÀNH
ĐỐI TƯỢNG VÀ NGƯỢC LẠI
Công
việc đầu tiên nên làm sau khi cài đặt XStream vào IDE
(Integrated Development Environment) là kiểm thử xem nó có
hoạt động tốt hay không. Ta tạo class testXStream
có nội dung như sau:
import
com.thoughtworks.xstream.XStream;
import
com.thoughtworks.xstream.io.xml.DomDriver;
import
java.util.List;
public
class
testXStream {
public
static
void
main(String[] args)
{
String
xml =
"
- "
"String1 "
+
"String2 "
+
"String3 "
+
"
";
//
khởi tạo đối tượng xStream tuân theo quy định của thư
viện
//
XStream
XStream
xStream = new
XStream(new
DomDriver());
//
chuyển đổi kiểu trả về thành List
List
result = (List)xStream.fromXML(xml);
System.out.println(result);
}
}
Trong
phương thức main, ta
khởi tạo một chuỗi có dạng XML, chuỗi này chứa thẻ
gốc (root) .
Sau đó, ta tiếp tục khởi tạo một đối tượng xStream
nhằm tiến hành việc chuyển đổi một chuỗi ở định
dạng XML sang đối tượng. Mục đích của việc đặt tên
(list và string)
cho các thẻ ở chuỗi xml
là tận dụng ưu điểm của thư viện XStream. Mỗi khi
duyệt qua một thẻ có nội dung tương ứng với một đối
tượng có sẳn trong Java, XStream lập tức chuyển đổi
nội dung của thẻ này thành nội dung của đối tượng
tương ứng. Như ta thấy ở đoạn mã trên, ba thẻ
được
chứa trong một thẻ
[String1,
String2, String3]
Sau khi
thực hiện tốt công việc kiểm thử XStream, bước tiếp
theo mà ta phải làm là chuyển đổi một chuỗi dạng XML,
các thẻ của chuỗi này hoàn toàn không tương ứng với
các đối tượng có sẳn trong Java, sang đối tượng. Công
việc phải làm lúc này là cho XStream biết rõ thẻ và đối
tượng mà XStream sẽ phân tích. Ta xây dựng một đối
tượng Person bao gồm
các thuộc tính tên (fullName),
địa chỉ nhà (homeAddress)
và số điện thoại (phoneNumber):
public
class
Person {
private
String fullName;
private
String homeAddress;
private
int
phoneNumber;
public
Person(String fullName, String homeAddress, int
phoneNumber) {
this.fullName
= fullName;
this.homeAddress
= homeAddress;
this.phoneNumber
= phoneNumber;
}
public
String toString()
{
return
fullName + " - "
+ homeAddress + " - "
+ phoneNumber;
}
}
Class
testXStream_person tương
ứng sẽ là:
import
com.thoughtworks.xstream.XStream;
import
com.thoughtworks.xstream.io.xml.DomDriver;
public
class
testXStream_person {
public
static
void
main(String[] args)
{
String
xml =
""
+
"Nguyen
Tuong Thuy " +
"19/36D
Tran Binh Trong, P5, Q Binh Thanh "
+
"8431459 "
+
"
";
XStream
xStream = new
XStream(new
DomDriver());
xStream.alias("person",
Person.class);
//
chuyển đổi kiểu trả về thành Person
Person
result = (Person)xStream.fromXML(xml);
System.out.println(result);
}
}
Với
chuỗi xml trên, XStream
phải nhận biết được từng thẻ tương ứng với đối
tượng nào để có thể tiến hành chuyển đổi. Mặc
định, các thẻ ,
,
,
không
nằm trong phạm vi nhận biết của XStream, do đó ta phải
khai báo cho XStream biết đâu là chuỗi mà ta cần lấy đối
tượng tương ứng. Phương thức alias
quy định đối tượng tương ứng với thẻ mà XStream gặp
trong quá trình phân tích chuỗi. Như vậy, thẻ
sẽ tương ứng với đối tượng Person.
Căn cứ vào thông số trong phương thức này, XStream tiếp
tục phân tích các thẻ con của
dựa trên các thuộc tính (trường) tương ứng có trong
class Person. Lưu ý là
tên của các thuộc tính trong đối tượng Person
phải giống với tên của các thẻ con nằm trong
và kiểu của các trường cũng tương ứng với dữ liệu
ở các thẻ con. Kết quả của đoạn chương trình trên
sẽ là:
Nguyen
Tuong Thuy - 19/36D Tran Binh Trong, P5, Q Binh Thanh - 8431459
Sau khi
đã có được đối tượng, công việc chuyển đổi từ
đối tượng sang định dạng XML vô cùng đơn giản bằng
việc gọi phương thức toXML
của XStream:
import
com.thoughtworks.xstream.XStream;
import
com.thoughtworks.xstream.io.xml.DomDriver;
public
class
testXStream_person {
public
static
void
main(String[] args)
{
String
xml =
""
+
"Nguyen
Tuong Thuy " +
"19/36D
Tran Binh Trong, P5, Q Binh Thanh "
+
"8431459 "
+
"
";
XStream
xStream = new
XStream(new
DomDriver());
xStream.alias("person",
Person.class);
//
chuyển đổi kiểu trả về thành Person
Person
result = (Person)xStream.fromXML(xml);
String
xmlResult = xStream.toXML(result);
System.out.println(xmlResult);
//
kết quả chính bằng chuỗi xml
}
}
Mặc dù
chỉ mới sơ lược qua một vài phương thức có trong thư
viện XStream, nhưng ta đã có thể tận dụng được tốt
những tính năng có sẳn của thư viện, giúp cho việc
thao tác với đối tượng và dữ liệu dễ dàng hơn. Ưu
điểm nổi bật của định dạng XML là cho phép người
sử dụng tự do đặt tên thẻ, cũng như số lượng thẻ
tùy ý miễn là tuân theo cấu trúc định sẳn của XML.
Chúng ta đã tận dụng tốt ưu điểm này.
ĐỌC
TẬP TIN XML CÓ SỬ DỤNG TIẾNG VIỆT ĐỂ CHUYỂN ĐỔI
THÀNH ĐỐI TƯỢNG
Nâng cao
hơn so với phần trên, chuỗi xml
ở phần này sẽ được thay thế bằng một phương thức
đọc tập tin. Tập tin person.xml
được đọc có nội dung tương tự chuỗi xml
ở phần trên:
Ta tạo
một class mới với tên XMLFileToObject
để thuận tiện cho việc quan sát mã chương trình. Kết
quả in ra màn hình của phương thức main cũng tương tự
như kết quả có ở phần trên:
import
com.thoughtworks.xstream.XStream;
import
com.thoughtworks.xstream.io.xml.DomDriver;
import
java.io.*;
public
class
XMLFileToObject {
public
static
void
main(String[] args)
throws
FileNotFoundException, IOException {
String
xmlString = readXMLFromFile("person.xml");
XStream
xStream = new
XStream(new
DomDriver());
xStream.alias("person",
Person.class);
Person
person = (Person)xStream.fromXML(xmlString);
System.out.println(person);
}
//
phương thức đọc nội dung của một tập tin
//
kết quả trả về là một chuỗi đại diện cho nội dung
của tập tin đó
public
static
String readXMLFromFile(String
fileName) throws
FileNotFoundException, IOException {
BufferedReader
bufferedReader = new
BufferedReader(new
FileReader(fileName));
String
result = "";
while
(bufferReader.ready())
result
+= bufferReader.readLine();
bufferReader.close();
return
result;
}
}
Đến
đây, công việc đọc một tập tin XML có sử dụng tiếng
Việt thật dễ dàng bằng cách thay giá trị khởi tạo
của đối tượng bufferedReader
bằng một đối tượng hỗ trợ tiếng Việt. Bộ mã
Unicode tiếng Việt sử dụng ở đây là UTF-8 (Unicode
Transformation Format 8 bits):
public
class
XMLFileToObject {
public
static
void
main(String[] args)
throws
FileNotFoundException, IOException {
...
}
//
phương thức đọc nội dung của một tập tin có tiếng
Việt
//
kết quả trả về là một chuỗi đại diện cho nội dung
của tập tin đó
public
static
String readXMLFromFile(String
fileName) throws
FileNotFoundException, IOException {
// BufferedReader
bufferReader = new BufferedReader(new FileReader(fileName));
BufferedReader
bufferReader = new
BufferedReader(
new
InputStreamReader(
new
FileInputStream(fileName),
"UTF8"));
String
result = "";
...
}
}
Tiếp
tục, để có thể kiểm thử việc đọc tập tin tiếng
Việt cũng như việc lưu giữ thông tin có tiếng Việt vào
đối tượng, trước hết ta phải thay đổi nội dung tập
tin person.xml như sau:
Bước
kế tiếp là sử dụng System.out.println
in đối tượng person
ra màn hình để có thể quan sát dễ dàng. Tuy nhiên, do
cửa sổ hiển thị kết quả của IDE không thể đưa ra
thông tin tiếng Việt chính xác nên ta phải thông qua một
bước trung gian. Sau khi đưa nội dung tập tin XML vào đối
tượng, bước trung gian đưa đối tượng này ngược trở
lại vào một tập tin XML khác. Nếu nội dung tập tin XML
mới này chứa các chuỗi tiếng Việt chính xác và đầy
đủ tương tự tập tin XML ban đầu thì công việc đọc
tập tin XML tiếng Việt đã thành công. Hơn thế, công
đoạn kiểm thử việc ghi một đối tượng có dữ liệu
tiếng Việt cũng đã hoàn tất.
Class
XMLFileToObject lúc này
có nội dung như bên dưới. Kết quả của đoạn chương
trình là tạo ra một tập tin person2.xml
có nội dung tương tự person.xml:
public
class
XMLFileToObject {
public
static
void
main(String[] args)
throws
FileNotFoundException, IOException {
String
xmlString = readXMLFromFile("person.xml");
XStream
xStream = new
XStream(new
DomDriver());
xStream.alias("person",
Person.class);
Person
person = (Person)xStream.fromXML(xmlString);
writeXMLToFile(xStream.toXML(person),
"person2.xml");
}
//
phương thức đọc nội dung của một tập tin có tiếng
Việt
//
kết quả trả về là một chuỗi đại diện cho nội dung
của tập tin đó
public
static
String readXMLFromFile(String
fileName) throws
FileNotFoundException, IOException {
BufferedReader
bufferReader = new
BufferedReader(
new
InputStreamReader(
new
FileInputStream(fileName),
"UTF8"));
String
result = "";
while
(bufferReader.ready())
result
+= bufferReader.readLine();
bufferReader.close();
return
result;
}
//
phương thức ghi một chuỗi có tiếng Việt xmlString vào
tập tin fileName
public
static
void
writeXMLToFile(String
xmlString, String fileName) throws
IOException {
BufferedWriter
bufferedWriter = new
BufferedWriter(
new
OutputStreamWriter(
new
FileOutputStream(fileName),
"UTF8"));
bufferedWriter.write(xmlString);
bufferedWriter.close();
}
}
GÕ
TIẾNG VIỆT VỚI ECLIPSE 3.0
Eclipse
3.0 cung cấp khả năng gõ tiếng Việt ngay trong trình soạn
thảo. Ở chế độ mặt định, Eclipse vẫn cho phép gõ
chuỗi tiếng Việt trong trình soạn thảo, nhưng khi thực
hiện việc ghi chuỗi này xuống tập tin thì kết quả
không chính xác. Do đó, để Eclipse có thể hoàn toàn hỗ
trợ việc gõ tiếng Việt mà không cần dùng bất kỳ một
công cụ hay một phương thức nào khác (như phương thức
VIQRToUnicodeHex
hỗ trợ trong JBuilderX mà bài viết sẽ đề cập bên
dưới), ta có thể thực hiện các bước đơn giản sau:
- Vẫn tạo project, package, class như bình thường. Giả sử như ta sử dụng lại class XMLFileToObject ở phần trên. Class này có phương thức readXMLFromFile (đọc nội dung một tập tin XML có tiếng Việt), phương thức writeXMLToFile (ghi một chuỗi có tiếng Việt ra tập tin XML) và một phương thức main cho phép kiểm thử.
- Cấu hình Eclipse để hỗ trợ mã tiếng Việt UTF-8 ở mọi project:
- Vào menu Window, chọn Preferences.
- Ở cửa sổ Preferences, chọn Workbench → Editors ở khung bên trái. Sau đó, tại combo box Other ở Text file encoding, chọn UTF-8. Kích OK.
- Mỗi khi tạo một class mới, ta đều có thể gõ được tiếng Việt và ghi xuống tập tin dễ dàng.
- Thay đổi mã chương trình ở phương thức main để kiểm thử:
Để đơn giản, ta chỉ thực hiện việc ghi một chuỗi
dạng XML có tiếng Việt xuống tập tin mà không cần
thông qua XStream như đã làm ở trên. Do đó đồng thời
ta cũng có thể lược bỏ phương thức readXMLFromFile
(vì chỉ thực hiện việc ghi tập tin). Toàn bộ mã nguồn
của class XMLFileToObject
như sau:
import
java.io.*;
public
class
XMLFileToObject {
public static
void main(String[]
args) throws
IOException {
String xml
=
""
+ "\n"
+
"Nguyễn Tường
Thụy " +
"\n" +
"19/36D
Trần Bình Trọng, P5, Q Bình Thạnh "
+ "\n"
+
"8431459 "
+ "\n"
+
"
";
writeXMLToFile(xml,
"person.xml");
}
public
static void
writeXMLToFile(String xmlString,
String fileName)
throws IOException
{
BufferedWriter bufferedWriter
= new
BufferedWriter(
new
OutputStreamWriter(
new
FileOutputStream(fileName),
"UTF8"));
bufferedWriter.write(xmlString);
bufferedWriter.close();
}
}
Vậy là sau khi chạy đoạn chương trình trên, tập tin
person.xml được phát
sinh. Tập tin này có nội dung là chuỗi xml
với đầy đủ các ký tự tiếng Việt.
HỖ
TRỢ TẠO CHUỖI TIẾNG VIỆT TRONG JBUILDER IDE
Ngoài
cách tạo tiếng Việt như ở Eclipse, ta có thể tạo được
các ký tự tiếng Việt trong IDE bằng cách dùng mã Unicode
Hex tương ứng. Ví dụ, ký tự ắ
có thể được đại diện bằng mã \u1EAF,
và chuỗi "thắng"
sẽ tương ứng với "th\u1EAFng".
Vậy là mỗi khi muốn tạo một ký tự tiếng Việt nào
người lập trình cũng phải gõ mã đại diện của nó,
bao nhiêu ký tự tiếng Việt khác nhau là bấy nhiêu mã
Unicode người lập trình phải nhớ.
Bài viết
này cung cấp một phương thức hỗ trợ việc gõ tiếng
Việt dễ dàng hơn. Khi gõ một chuỗi ký tự tiếng Việt,
thay vì gõ bình thường thì người lập trình cần gõ
theo qui ước của VIQR, rồi gọi phương thức
VIQRToUnicodeHex
để hỗ trợ việc chuyển đổi sang mã Unicode.
VIQR đơn
thuần chỉ là bảng mã dùng các ký tự gần giống các
dấu của ký tự để biểu diễn các dấu thật sự. Ví
dụ như ta có ký tự ắ,
ký tự này thể hiện ở VIQR sẽ là a(';
ký tự ô sẽ là
o^; ký tự è
là e`...
Phương
thức hỗ trợ VIQRToUnicodeHex
trong class UnicodeConverter
hoạt động dựa theo nguyên tắc tìm kiếm trên một bảng
băm (hash table) có lưu giữ từng cặp key-value
tương ứng với mã
VIQR-mã
Unicode Hex. Phương thức
VIQRToUnicodeHex
sử dụng một đối tượng kiểu HashMap
để hiện thực bảng băm. HashMap chứa tất cả các ký
tự tiếng Việt có thể có cùng với mã Unicode Hex tương
ứng. Mỗi khi yêu cầu lấy mã Unicode Hex của ký tự
VIQR, key
của HashMap sẽ là ký tự VIQR và value
Unicode Hex sẽ là giá trị trả về. Như vậy việc chuyển
đổi VIQR thành Unicode Hex đơn giản chỉ là việc tìm
kiếm. Mã nguồn của phương thức VIQRToUnicodeHex
như sau:
public
static
String VIQRToUnicodeHex(String viqr) {
Map
hashMap = new
HashMap();
hashMap.put("a'","\u00E1");
hashMap.put("a`","\u00E0");
hashMap.put("a?","\u1EA3");
hashMap.put("a~","\u00E3");
hashMap.put("a.","\u1EA1");
hashMap.put("a(","\u0103");
hashMap.put("a('","\u1EAF");
hashMap.put("a(`","\u1EB1");
hashMap.put("a(?","\u1EB3");
hashMap.put("a(~","\u1EB5");
hashMap.put("a(.","\u1EB7");
hashMap.put("a^","\u00E2");
hashMap.put("a^'","\u1EA5");
hashMap.put("a^`","\u1EA7");
hashMap.put("a^?","\u1EA9");
hashMap.put("a^~","\u1EAB");
hashMap.put("a^.","\u1EAD");
hashMap.put("e'","\u00E9");
hashMap.put("e`","\u00E8");
hashMap.put("e?","\u1EBB");
hashMap.put("e~","\u1EBD");
hashMap.put("e.","\u1EB9");
hashMap.put("e^","\u00EA");
hashMap.put("e^'","\u1EBF");
hashMap.put("e^`","\u1EC1");
hashMap.put("e^?","\u1EC3");
hashMap.put("e^~","\u1EC5");
hashMap.put("e^.","\u1EC7");
hashMap.put("i'","\u00ED");
hashMap.put("i`","\u00EC");
hashMap.put("i?","\u1EC9");
hashMap.put("i~","\u0129");
hashMap.put("i.","\u1ECB");
hashMap.put("o'","\u00F3");
hashMap.put("o`","\u00F2");
hashMap.put("o?","\u1ECF");
hashMap.put("o~","\u00F5");
hashMap.put("o.","\u1ECD");
hashMap.put("o^","\u00F4");
hashMap.put("o^'","\u1ED1");
hashMap.put("o^`","\u1ED3");
hashMap.put("o^?","\u1ED5");
hashMap.put("o^~","\u1ED7");
hashMap.put("o^.","\u1ED9");
hashMap.put("o+","\u01A1");
hashMap.put("o+'","\u1EDB");
hashMap.put("o+`","\u1EDD");
hashMap.put("o+?","\u1EDF");
hashMap.put("o+~","\u1EE1");
hashMap.put("o+.","\u1EE3");
hashMap.put("u'","\u00FA");
hashMap.put("u`","\u00F9");
hashMap.put("u?","\u1EE7");
hashMap.put("u~","\u0169");
hashMap.put("u.","\u1EE5");
hashMap.put("u+","\u01B0");
hashMap.put("u+'","\u1EE9");
hashMap.put("u+`","\u1EEB");
hashMap.put("u+?","\u1EED");
hashMap.put("u+~","\u1EEF");
hashMap.put("u+.","\u1EF1");
hashMap.put("y'","\u00FD");
hashMap.put("y`","\u1EF3");
hashMap.put("y?","\u1EF7");
hashMap.put("y~","\u1EF9");
hashMap.put("y.","\u1EF5");
hashMap.put("dd","\u0111");
hashMap.put("A'","\u00C1");
hashMap.put("A`","\u00C0");
hashMap.put("A?","\u1EA2");
hashMap.put("A~","\u00C3");
hashMap.put("A.","\u1EA0");
hashMap.put("A(","\u0102");
hashMap.put("A('","\u1EAE");
hashMap.put("A(`","\u1EB0");
hashMap.put("A(?","\u1EB2");
hashMap.put("A(~","\u1EB4");
hashMap.put("A(.","\u1EB6");
hashMap.put("A^","\u00C2");
hashMap.put("A^'","\u1EA4");
hashMap.put("A^`","\u1EA6");
hashMap.put("A^?","\u1EA8");
hashMap.put("A^~","\u1EAA");
hashMap.put("A^.","\u1EAC");
hashMap.put("E'","\u00C9");
hashMap.put("E`","\u00C8");
hashMap.put("E?","\u1EBA");
hashMap.put("E~","\u1EBC");
hashMap.put("E.","\u1EB8");
hashMap.put("E^","\u00CA");
hashMap.put("E^'","\u1EBE");
hashMap.put("E^`","\u1EC0");
hashMap.put("E^?","\u1EC2");
hashMap.put("E^~","\u1EC4");
hashMap.put("E^.","\u1EC6");
hashMap.put("I'","\u00CD");
hashMap.put("I`","\u00CC");
hashMap.put("I?","\u1EC8");
hashMap.put("I~","\u0128");
hashMap.put("I.","\u1ECA");
hashMap.put("O'","\u00D3");
hashMap.put("O`","\u00D2");
hashMap.put("O?","\u1ECE");
hashMap.put("O~","\u00D5");
hashMap.put("O.","\u1ECC");
hashMap.put("O^","\u00D4");
hashMap.put("O^'","\u1ED0");
hashMap.put("O^`","\u1ED2");
hashMap.put("O^?","\u1ED4");
hashMap.put("O^~","\u1ED6");
hashMap.put("O^.","\u1ED8");
hashMap.put("O+","\u01A0");
hashMap.put("O+'","\u1EDA");
hashMap.put("O+`","\u1EDC");
hashMap.put("O+?","\u1EDE");
hashMap.put("O+~","\u1EE0");
hashMap.put("O+.","\u1EE2");
hashMap.put("U'","\u00DA");
hashMap.put("U`","\u00D9");
hashMap.put("U?","\u1EE6");
hashMap.put("U~","\u0168");
hashMap.put("U.","\u1EE4");
hashMap.put("U+","\u01AF");
hashMap.put("U+'","\u1EE8");
hashMap.put("U+`","\u1EEA");
hashMap.put("U+?","\u1EEC");
hashMap.put("U+~","\u1EEE");
hashMap.put("U+.","\u1EF0");
hashMap.put("Y'","\u00DD");
hashMap.put("Y`","\u1EF2");
hashMap.put("Y?","\u1EF6");
hashMap.put("Y~","\u1EF8");
hashMap.put("Y.","\u1EF4");
hashMap.put("DD","\u0110");
return
(String)hashMap.get(viqr);
}
Ta cũng
có thể viết một vài dòng mã kiểm thử ở phương thức
main thuộc
XMLFileToObject như sau:
public
static
void
main(String[] args)
throws
FileNotFoundException, IOException {
XStream
xStream = new
XStream(new
DomDriver());
xStream.alias("person",
Person.class);
//
name = "Nguyễn Tường Thụy"
String
name = "Nguy"
+ UnicodeConverter.VIQRToUnicodeHex("e^~")
+
"n
T" +
UnicodeConverter.VIQRToUnicodeHex("u+")
+
UnicodeConverter.VIQRToUnicodeHex("o+`")
+ "ng Th"
+
UnicodeConverter.VIQRToUnicodeHex("u.")
+ "y";
//
address = "19/36D Trần Bình Trọng, P5, Q Bình Thạnh"
String
address = "19/36D
Tr"
+ UnicodeConverter.VIQRToUnicodeHex("a^`")
+
"n
B" +
UnicodeConverter.VIQRToUnicodeHex("i`")
+ "nh Tr"
+
UnicodeConverter.VIQRToUnicodeHex("o.")
+ "ng, P5, Q B"
+
UnicodeConverter.VIQRToUnicodeHex("i`")
+ "nh Th"
+
UnicodeConverter.VIQRToUnicodeHex("a.")
+ "nh";
Person
person = new
Person(name, address, 8431459);
writeXMLToFile(xStream.toXML(person),
"person.xml");
}
KẾT
LUẬN
Thư viện
XStream tạo nên một môi trường lập trình chuyên nghiệp
và dễ dàng đối với lập trình viên Java. XStream chắc
chắn có những hạn chế riêng của nó, nhưng về cơ bản,
nhu cầu của người lập trình khi thao tác trên đối
tượng và dữ liệu của đối tượng là hoàn toàn có
thể đáp ứng. Việc đọc và ghi dữ liệu hướng đối
tượng xuống hệ thống tập tin chắc chắn chưa thể so
sánh với mô hình cơ sở dữ liệu, nhưng phần nào giúp
lập trình viên giảm thiểu những phức tạp khi thao tác
trên nhiều đối tượng.
Bài viết
cũng đã hỗ trợ thêm việc đọc và ghi đối tượng có
sử dụng tiếng Việt thành định dạng XML thông qua thư
viện XStream. Nhu cầu trước đây mà nhiều lập trình
viên mong muốn đã được hiện thực, việc áp dụng
tiếng Việt khi thao tác trên đối tượng và XML là hoàn
toàn có thể. Điều mà đa phần các lập trình viên Việt
Nam mong muốn lúc này là các IDE cũng như JDK (Java
Development Kit) hỗ trợ tiếng Việt tốt hơn và hoàn thiện
hơn.
TÀI LIỆU THAM
KHẢO
[1] JOE
WALNES, 2004. XStream Tutorial kèm theo gói chương trình
XStream. http://xstream.codehaus.org/
[2]
http://www.vovisoft.com,
2000. Bảng mã VIQR và Unicode Hex.
No comments:
Post a Comment