2009-08-16 3 views
5

Java로 실행되는 프로그램간에 데이터를 저장하는 가장 좋은 방법은 무엇입니까? 나는 이미 텍스트 파일을 사용하여 정보를 저장할 수 있다는 것을 이미 알고 있지만 프로그램 실행 사이에 프로그램에 의해 생성 된 정보를 저장하는 더 좋은 방법이 있는지 궁금합니다.프로그램간에 데이터를 저장하는 가장 좋은 방법은 java에서 실행됩니까?

또한 정보를 안전하게 유지할 수있는 방법이 있습니까? 특히 최종 사용자가 액세스 할 수 없도록하고 싶습니다.

답변

5

궁금 해서요?

ObjectOutputStream을 사용하여 파일로 순차적으로 변환하고 을 사용하면 되 찾을 수 있습니다.

정보를 안전하게 유지하기 위해 어떤 방법이 있습니까? 에서 최종 사용자가 액세스 할 수 있습니까?

코드가 최종 사용자의 시스템에서 실행되는 경우 코드가 데이터를 가져 오는 것을 방지 할 수 없습니다. 디버거를 부착하기 쉽고 코드를 작성하는 데 시간을 낭비 할 필요가 없습니다. 실행 중에 프로그램의 상태를 검사하십시오. 바이너리 형식으로 Java 직렬화는 기술적이지 않은 사용자가이를 읽을 수 없도록 해줍니다.

+0

압축이나 암호화의 대상이되는 스트림에 직렬화하지 못하게하는 것은 아무것도 없습니다. 결코 깨지지 않을 것이지만 결코 깨지지 않을 것입니다. 그만한 가치가 있다면? 아마 대부분의 경우는 아닙니다. – Fredrik

+1

아니요. 스트림을 암호화하는 응용 프로그램이 최종 사용자의 컴퓨터에서 실행되는 경우 모든 종류의 암호화는 내가 쓴 것처럼 디버그 모드에서 실행하고 데이터를 빼내기가 매우 쉽기 때문에 절대적인 시간 낭비입니다 그것은 (응용 프로그램이 암호화 키를 포함해야한다는 사실을 제외하고) 암호화됩니다. –

1

암호 파일 또는 암호가있는 로컬 데이터베이스.

2

Properties을 정보 저장에 사용할 수 있습니다. 보안을 설정하려면 encryption stream을 실행하십시오.

+0

만약 당신이 그것을 과용하고 싶다면, 당신 자신의 이진 형식을 굴려서 암호화하십시오. – Esko

1

db4o을 사용하여 데이터를 저장할 수 있습니다. 이것은 객체 데이터베이스이며 암호화를 지원합니다. 어떤 방법 가 실행 프로그램의 사이의 프로그램에 의해 genereated있다 다른 배치 정보가 있다면

0

Java를 시작할 때 가장 좋은 점은 ObjectOutputStream 또는 텍스트 파일을 사용하는 것입니다. 일단 경험이 많으면 데이터베이스를 사용할 수 있습니다.

0

직렬화는 어떻습니까?

사용자가 읽을 수 없으며 비교적 쉽습니다.

0

다른 사람들처럼 데이터를 직렬화하는 방법은 무수히 있습니다. SQLite 나 간단한 직렬화 같은 가벼운 것을 사용할 수 있습니다. 데이터를 암호화하기 위해 시도한 모든 시도가 실패 할 수 있다는 것을 알고 있습니다. 특히 Java 코드의 경우 쉽게 되돌릴 수 있기 때문에이를 피하십시오.

그러나 대량의 사용자가 Java 프로그램을 리버스 엔지니어링하여 데이터 암호를 해독하는 방법을 이해하는 데 기술적 인면이 충분하지 않은 경우 몇 가지 기본 암호화 방법을 없앨 수 있어야합니다 다른 대답에서 언급하고 좋을 것입니다. 아무 것도 제어 할 수없는 시스템에 언제든지 상주한다는 사실을 깨달으십시오. 가장 영구적 인 사용자가이를 해독 할 방법을 찾지 못하게하는 방법은 없습니다.

개인적으로 sqlite를 사용하고 필드에 입력 한 데이터에 간단한 암호화를 사용하는 것이 좋습니다. 따라서 누군가가 로컬 DB 파일에 연결할 수있을 정도로 똑똑한 경우 일부에서는 암호화 알고리즘을 취소해야합니다. 방법. 일반 사용자의 99.9 %는이 수준의 조사에 신경을 쓰지 않을 것입니다.

+0

또한 통계의 92.3 %가 그 자리에서 작성되었습니다! – MattC

+0

@MattC : 97 % 잘못 됐어 :-D – Fredrik

1

일부 사람들은 일련 번호 사용을 제안했습니다. 직렬화에는 여러 가지 단점이 있음을 유의하십시오.

  • 버전 문제. 직렬화 된 클래스에서 무언가를 변경하면 이전 버전의 프로그램으로 작성된 직렬화 된 파일을 더 이상 쉽게 읽을 수 없습니다.
  • 정확한 파일 형식을 알지 못합니다. 다른 프로그램을 나중에 다른 프로그램 언어로 작성하고 파일을 읽어야하는 경우 정말 어려울 것입니다.

직렬화는 장기간 저장에 적합하지 않습니다.

작은 내장 데이터베이스를 대신 사용하는 것이 좋습니다. 임베디드 데이터베이스는 프로그램과 동일한 프로세스에서 실행되는 데이터베이스입니다. Sun의 Java에는 Apache Derby의 버전 인 Java DB이 포함되어 있습니다. HSQLDB도 있습니다.이 데이터베이스는 내장 데이터베이스로 사용할 수있는 또 다른 작고 순수한 Java 데이터베이스입니다.

0

XML은 직렬화 기술로서 객체 직렬화와 같은 바이너리 형식보다 저장소를 조정할 프로그램의 향후 변경에보다 탄력적입니다. 그러나 그렇게하면 대부분의 사용자가 읽기 쉽고 변경할 수 있습니다.

매우 간단한 압축/압축 해제는 거의 모든 사용자가 데이터의 실제 내용을 얻지 못하게합니다. 현재 작성 스트림에서 GZipInputStream/GZipOutputStream을 사용하면 작업이 수행됩니다. 당신이 당신의 소프트웨어를 사용하는 사람들에게 더 많은 영향을 미칠 것입니다.

관련 문제