Sinh dòng bytecode

Một phần của tài liệu (LUẬN văn THẠC sĩ) kiểm tra sự tuân theo giữa thực thi và đặc tả PSM trong mô hình dựa trên thành phần (Trang 43 - 44)

3 Thực nghiệm, đánh giá

3.2.1 Sinh dòng bytecode

Bộ công cụ phát triển JDK của Sun có chương trình cho phép người dùng dịch ngược một file bytecode có dạng file class thành dòng bytecode, có tên javap (The Java Class File Disassemble). Để nhận được kết quả từ chương trình này và lưu thành file văn bản để xử lý sau, chúng tôi sử dụng cơ chế đường ống (pipeline) sẵn có trong hầu hết các hệ điều hành.

Listing 3.1: Sinh dòng bytecode

try {

P r o c e s s p r o c = Runtime . getRuntime ( ) . e x e c ( command ) ; // E . g : j a v a p −c H e l l o

i n p u t F i l e = new B u f f e r e d R e a d e r (new I n p u t S t r e a m R e a d e r ( p r o c . g e t I n p u t S t r e a m ( ) ) ) ; o u t p u t F i l e = new B u f f e r e d W r i t e r (new F i l e W r i t e r ( o u t F i l e n a m e ) ) ; S t r i n g l i n e ; while ( ( l i n e = i n p u t F i l e . r e a d L i n e ( ) ) != n u l l) { o u t p u t F i l e . w r i t e ( l i n e ) ; o u t p u t F i l e . newLine ( ) ; } i n p u t F i l e . c l o s e ( ) ; o u t p u t F i l e . c l o s e ( ) ; } catch ( I O E x c e p t i o n e ) { // P r o c e s s E x c e p t i o n h e r e . }

Ví dụ, khi thực hiện câu lệnh “javap -c Hello > a.out” từ shell của một hệ điều hành, file Hello.class sẽ được dịch ngược và kết quả được lưu vào filea.out.

Để thực hiện một lệnh shell trong chương trình Java, chúng tôi gọi phương thứcexec(String command) của Runtime. Ví dụ, để thực hiện lệnh shell “javap -c Hello > a.out” trong chương trình Java, chúng tôi gọiRuntime.getRuntime().exec(“javap -c Hello > a.out”). Tuy nhiên, lệnh này không sinh được dòng bytecode và lưu vào filea.outnhư khi thực hiện từ shell của hệ điều hành. Vậy cách giải quyết thế nào?

Để giải quyết vấn đề này, chúng tôi điều khiển tiến trình được tạo ra bởi lời gọi phương thức exec(). Phương thức Runtime.exec() tạo ra một tiến trình và trả về đối tượng tiến trình đó, là một lớp con của lớp Process. Nó có thể được sử dụng để điều khiển tiến trình và nhận thông tin về tiến trình.

Lớp Process cung cấp các phương thức để cung cấp dữ liệu cho tiến trình, lấy kết quả trả về từ tiến trình, chờ đợi tiến trình hoàn thành, kiểm tra tình trạng tiến trình và kết thúc tiến trình. Đoạn mã lệnh Java trong Listing 3.1 giúp ta giải quyết khó khăn trên.

Một phần của tài liệu (LUẬN văn THẠC sĩ) kiểm tra sự tuân theo giữa thực thi và đặc tả PSM trong mô hình dựa trên thành phần (Trang 43 - 44)

Tải bản đầy đủ (PDF)

(65 trang)