2009-03-04 28 views
5

Tôi đang làm việc trên một số Java < -> Tương tác Perl. Tôi muốn biết cách tốt nhất là chuyển thông tin từ Perl sang Java. (Các câu trả lời hay về Perl và Java herehere btw).Làm cách nào để chuyển dữ liệu từ Perl sang Java?

Có rất nhiều văn bản và XML (XML :: Twig) tôi đang phân tích cú pháp trong Perl, trong một tập lệnh mà tôi phải gọi từ một Ứng dụng web Java. Vì vậy, tôi có tất cả điều này thu thập dữ liệu, và tôi cần nó để sử dụng nó bên trong một số đối tượng trong Java.

Chiến lược hay để gửi thông tin từ Perl tới Java là gì? Thậm chí có thể trả về một đối tượng hoặc cấu trúc dữ liệu tương thích khác từ Perl sang Java không?

Tôi đoán việc ghi vào một tệp văn bản và đọc nó từ Java sẽ làm cho tất cả các tối ưu hóa đạt được bằng cách sử dụng Perl vô nghĩa.

Biến dạng là một vấn đề quan trọng ở đây.

EDIT: Từ những gì tôi đã thấy here, có lẽ Inline-Java sẽ là một lựa chọn tốt?

+0

vì vậy bạn đang cố gắng làm cho mã java cũ của bạn thành perl? – TStamper

+0

1. hãy thử JSON 2. loại bỏ perl và chỉ sử dụng Java :) –

+0

Tôi đã đọc qua bài đăng của câu hỏi đó và được khuyến nghị sử dụng JSON, Inline-Java, mở Kết nối TCP và truyền dữ liệu và cuối cùng là trực tiếp chuyển XML. * Phương pháp nào tốt hơn trong số các phương pháp được đề xuất? * Có các tùy chọn nào khác tốt hơn để làm như vậy, về Dịch vụ Web hoặc bất kỳ đề xuất nào khác không? – Rachel

Trả lời

5

Nếu hiệu suất là quan trọng, tôi khuyên bạn nên có một quá trình Perl liên tục đang chạy. Bắt đầu một trình thông dịch Perl mỗi khi bạn muốn chạy mã của bạn sẽ là một chi phí khá lớn.

Cách dễ nhất để giao tiếp là cho quá trình Java để mở kết nối TCP với quy trình Perl, viết một số dữ liệu và lấy lại một số.

Định dạng bạn sử dụng để gửi dữ liệu đến từ quy trình Perl của bạn trở lại với Java sẽ phụ thuộc vào những gì bạn đang gửi và mức độ phổ biến và có thể sử dụng lại mà bạn muốn mã của mình. Việc gửi lại các chuỗi XML sẽ tốt đẹp và chung chung nhưng gửi lại các mảng byte được tạo với pack trong Perl và sau đó đọc một với DataInputStream trong Java sẽ nhanh hơn rất nhiều.

+0

Bạn thực sự có thể sử dụng Inline :: Java theo cách này. Nó có thể tạo ra một quá trình jvm giao tiếp với quá trình Perl của bạn. Đó là một định dạng tùy chỉnh hoặc khóa học, nhưng nó cho phép bạn sử dụng các đối tượng Java nguyên gốc trong Perl và ngược lại – mpeters

2

nếu bạn đã có XML, tùy chọn tốt nhất của bạn có lẽ là tiếp tục sử dụng nó.

+0

Việc triển khai đầu tiên của chúng tôi đã phân tích cú pháp Java của XML, nhưng chúng tôi thấy Perl nhanh hơn và hiệu quả hơn trong việc thực hiện điều này. Vì vậy, chúng tôi đang cố gắng để tạo ra công việc đó cho Perl tốt hơn ở đó. –

+0

Có thể bạn đang làm điều gì đó rất lạ nếu Perl phân tích cú pháp XML nhanh hơn Java. –

+0

Chúng tôi đã sử dụng xPath để điều hướng các tệp XML và lấy các giá trị nút; nhưng, không phải là Perl hướng đến loại công việc đó (phân tích cú pháp văn bản và những thứ như thế) ?? –

3

JSON là một định dạng dễ dàng, nhẹ để truyền dữ liệu.

bạn có thể thêm Rhino hoặc thứ gì đó tương tự như bộ công cụ của mình và có thể đạt được hiệu suất bổ sung (chưa kể đến công cụ tạo tập lệnh), nhưng điều này sẽ phụ thuộc vào mức độ phức tạp của dự án của bạn.

0

Tôi cũng thấy lạ khi mã perl của bạn phân tích cú pháp XML sẽ nhanh hơn đáng kể so với mã tương đương trong java. Mặc dù nó là, mặc dù, tôi không thể tưởng tượng rằng nó sẽ bao giờ được nhanh hơn so với chi phí phát sinh của IPC. Ngay cả khi bạn sử dụng một quá trình perl liên tục, bạn vẫn sẽ phải gửi dữ liệu, có lẽ trên một ổ cắm, sau đó lấy lại một số dữ liệu, và cuối cùng là deserialize nó vào một cái gì đó có thể sử dụng.

Bạn đã thử cải thiện hiệu suất phân tích cú pháp XML của mình trong java chưa? Nếu bạn đang sử dụng DOM hoặc thư viện của bên thứ ba như JDOM hoặc castor, hãy thử sử dụng SAX thay thế. Hoặc có thể chỉ sử dụng biểu thức thông thường thay vì phân tích cú pháp XML sẽ nhanh hơn (jwz notwithstanding).

Trong mọi trường hợp, tôi sẽ khuyên bạn sử dụng một hồ sơ với mã java của bạn đầu tiên để xem nếu nó có thể được cải thiện.

+1

Có một thư viện phân tích cú pháp XML perl thuần túy, nhưng không ai quan tâm đến tốc độ sử dụng nó. Hầu hết phân tích cú pháp XML perl liên quan đến người nước ngoài hoặc libxml2 dưới mui xe nhanh. – runrig

+0

Tôi không thấy nó sẽ tạo ra nhiều khác biệt như thế nào. Ngay cả khi phân tích cú pháp XML thô nhanh hơn đáng kể, bạn vẫn nhận được chi phí IPC. –

2

Inline::Java. Nó hoạt động thực sự tốt một khi bạn nhận được nó và chạy.Tôi đã làm việc trên một dự án một vài năm trước đây đã có một ứng dụng web Perl nói chuyện với một máy chủ Java SOAP cho một số giao tiếp thời gian thực và nó chỉ là cách quá chậm. Chúng tôi đã thay thế nó bằng một hệ thống sử dụng Inline :: Java để liên lạc và nó nhanh hơn rất nhiều. Chắc chắn giảm thiểu các điểm mà bạn truyền các đối tượng qua lại và cố gắng làm cho các đối tượng đó trở nên đơn giản (chúng ta đã mắc kẹt với các chuỗi, các số và các mảng) để giữ cho mọi thứ không thể kiểm soát được. Nhưng tôi chắc chắn là một chuyển đổi!

Các vấn đề liên quan