2009-08-16 25 views
5

Cách tốt nhất để lưu trữ dữ liệu giữa các chương trình chạy trong Java là gì? Tôi đã biết rằng bạn có thể sử dụng một tập tin văn bản và lưu trữ các thông tin theo cách đó, nhưng tôi đã tự hỏi nếu có một cách tốt hơn để lưu trữ các thông tin được tạo ra bởi chương trình giữa chạy của chương trình.Cách tốt nhất để lưu trữ dữ liệu giữa các chương trình chạy trong java là gì?

Ngoài ra, có cách nào để làm điều đó để giữ an toàn cho thông tin không? Cụ thể, tôi muốn giữ cho người dùng cuối không thể truy cập vào nó.

Trả lời

5

tôi đã tự hỏi nếu có bất kỳ cách nào khác đặt các thông tin mà được genereated bởi chương trình giữa chạy của chương trình?

Chỉ cần sử dụng ObjectOutputStream để tuần tự hóa nó vào một tệp và ObjectInputStream để lấy lại.

Ngoài ra còn có cách nào để thực hiện điều này để để giữ an toàn cho thông tin? từ người dùng cuối có thể truy cập vào nó?

Nếu mã chạy trên hệ thống của người dùng cuối thì không, không có cách nào để ngăn chúng lấy dữ liệu - không đáng để bạn mã hóa bằng cách nào đó vì dễ dàng đính kèm trình gỡ rối và kiểm tra trạng thái của chương trình trong khi nó đang chạy. Là một định dạng nhị phân, tuần tự hóa Java sẽ ngăn không cho người dùng phi kỹ thuật giải mã nó, và đó là điều tốt nhất bạn có thể hy vọng.

+0

Có tất nhiên không có gì ngăn cản anh ta từ serializing đến một dòng đó là đối tượng của nén và/hoặc mã hóa. Nó sẽ không bao giờ là không thể phá vỡ nhưng có thể là khá gần với không thể phá vỡ. Nếu nó là giá trị nó? Có lẽ không phải trong nhiều trường hợp. – Fredrik

+1

No. Nếu ứng dụng mã hóa luồng đang chạy trên máy của người dùng cuối thì mọi loại mã hóa là một sự lãng phí tuyệt đối của thời gian, như tôi đã viết, rất dễ dàng để chạy nó trong chế độ gỡ lỗi và giật dữ liệu trước đó nó được mã hóa (ngoài thực tế là ứng dụng sẽ phải chứa khóa mã hóa). –

1

Mật mã trên các tệp hoặc cơ sở dữ liệu cục bộ bằng mật khẩu.

2

Bạn có thể sử dụng Properties để lưu trữ thông tin. Nếu bạn muốn bảo mật, hãy chạy nó qua một số loại encryption stream.

+0

Và nếu bạn muốn lạm dụng nó, hãy cuộn định dạng nhị phân của riêng bạn và mã hóa. – Esko

1

Bạn có thể sử dụng db4o để lưu trữ dữ liệu. Đó là một cơ sở dữ liệu đối tượng và hỗ trợ mã hóa.

0

Điều tốt nhất để sử dụng khi bắt đầu Java là sử dụng ObjectOutputStream hoặc tệp văn bản. Một khi bạn có nhiều kinh nghiệm thì bạn có thể sử dụng cơ sở dữ liệu.

0

Làm thế nào về tuần tự hóa?

Người dùng không thể đọc và điều này tương đối dễ dàng.

0

Như những người khác đã nói, có vô số cách để tuần tự hóa dữ liệu. Bạn có thể sử dụng một cái gì đó nhẹ như SQLite hoặc chỉ đơn giản hóa serialization. Chỉ cần nhận ra rằng bất kỳ nỗ lực nào bạn thực hiện để mã hóa dữ liệu có thể bị đánh bại, đặc biệt là trong trường hợp mã Java vì nó có thể dễ dàng đảo ngược. Tuy nhiên, nếu phần lớn người dùng của bạn không đủ kỹ thuật để hiểu sự phức tạp của kỹ thuật đảo ngược chương trình Java để tìm ra cách giải mã dữ liệu của bạn, bạn sẽ có thể loại bỏ một số phương pháp mã hóa cơ bản như được đề cập trong một câu trả lời khác và được tốt. Chỉ cần nhận ra rằng bất cứ lúc nào bất cứ điều gì cư trú trên một máy bạn không kiểm soát, không có cách nào để giữ cho người dùng kiên trì nhất từ ​​tìm ra cách để crack nó.Cá nhân tôi sẽ đề xuất sử dụng sqlite và sử dụng mã hóa đơn giản trên dữ liệu bạn đưa vào các trường để nếu ai đó đủ thông minh để có thể kết nối với tệp DB cục bộ, họ vẫn phải đảo ngược thuật toán mã hóa của bạn trong một số cách thức. 99,9% người dùng thông thường sẽ không bận tâm với mức độ điều tra này.

+0

Ngoài ra, 92,3% số liệu thống kê được thực hiện ngay tại chỗ! – MattC

+0

@ McC: Bạn đã hiểu sai, 97% :-D – Fredrik

1

Một số người được đề xuất sử dụng tuần tự hóa. Cẩn thận rằng có một số nhược điểm để serialization.

  • Vấn đề về phiên bản. Nếu bạn thay đổi thứ gì đó trong các lớp được sắp xếp theo thứ tự, thì các tệp được tuần tự được viết bằng phiên bản cũ của chương trình của bạn không thể đọc dễ dàng được nữa.
  • Bạn không biết định dạng tệp chính xác. Nó sẽ thực sự khó khăn nếu bạn muốn viết một chương trình khác sau này, có thể bằng một ngôn ngữ lập trình khác, cần đọc tập tin đó.

Việc tuần tự hóa không phù hợp để lưu trữ lâu dài.

Tôi khuyên bạn nên sử dụng cơ sở dữ liệu nhỏ được nhúng. (Cơ sở dữ liệu nhúng là cơ sở dữ liệu chạy trong cùng một tiến trình như chương trình của bạn). Lưu ý rằng Java của Sun bao gồm Java DB, là phiên bản của Apache Derby. Ngoài ra còn có HSQLDB, một cơ sở dữ liệu Java nhỏ và tinh khiết khác có thể được sử dụng làm cơ sở dữ liệu nhúng.

0

XML làm kỹ thuật tuần tự hóa có khả năng linh hoạt hơn đối với các thay đổi trong tương lai trong chương trình của bạn, điều chỉnh bộ nhớ so với các định dạng nhị phân như Đối tượng tuần tự hóa. Tuy nhiên điều đó sẽ làm cho nó dễ đọc và có thể thay đổi được bởi hầu hết người dùng.

Nén/giải nén rất đơn giản sẽ khiến hầu hết người dùng không nhận được nội dung thực tế của dữ liệu. Việc sử dụng GZipInputStream/GZipOutputStream xung quanh luồng ghi hiện tại của bạn sẽ thực hiện công việc. Việc bảo vệ của bạn phức tạp hơn chống lại prying bạn nhận được nhiều hơn nó sẽ ảnh hưởng đến người sử dụng phần mềm của bạn.

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