2016-11-23 3 views
0

내가 바이트 배열로 변환 할 때 I, 이제자바 : 한 줄에 데이터 쓰기를 제한하는 방법

private static void write(String file, BigInteger... values) throws IOException { 
    try (FileOutputStream fileStream = new FileOutputStream(file)) { 
     for (BigInteger b : values) { 
      fileStream.write(b.toByteArray()); 
      fileStream.write(new byte[]{(byte) '\n'}); 
     } 
    } 
} 

같은 파일에 쓰기 2 BigIntegers

BigInteger p = new BigInteger(bits, certainty, new SecureRandom()); 
BigInteger q = new BigInteger(bits, certainty, new SecureRandom()); 

으로 내가 가진 파일을 열면 두 줄 이상의 결과가 나타납니다. 나중에 줄 수 있도록 한 줄에 하나씩 써야합니다.

write("public", p, q); 

결과는 이진이며 쓰기 라인 수를 변화 :

는 I은 함수를 호출한다. 때로는 2 또는 3 또는 심지어 6입니다!

달성 방법은 있습니까? 아니면 다른 해결 방법이 있습니까?

+0

혼란 스럽습니다. 2 대신 3 줄이기 때문에 작동하지 않습니까? – satnam

+0

예, 정확히 2 행의 데이터가 필요하므로 나중에 가져올 수 있습니다 – user7201762

+0

파일에 게시물을 포함시킬 수 있고 '쓰기'방법을 어떻게 사용할 수 있습니까? –

답변

1

이 한 줄에 하나 개의 BigInteger를 원하는 경우에, 당신은 텍스트를 써있어

(내 의견을 참조) 확실하게 당신이 그것을 시도하는 방법을 작동하지 않습니다

PrintWriter pw = ...; 

for (BigInteger b : values) { 
    pw.println(b.toString()); 
} 
+0

하지만 내용을 읽을 수 없게하고 싶습니다. 이것이 가능한가?? – user7201762

+0

@ user7201762 물론 가능합니다 ... 암호화를 사용할 수 있습니다. 그러나 한 번에 한 가지 문제. – ControlAltDel

+0

David가 제안한 Base 64는 * less *가 판독 가능하고 더 짧을 것이라고 제안했습니다. 그러나 암호화가 읽을 수 없게하는 유일한 방법이라고 말하면서 세 손가락으로 경례를내는 것이 옳습니다. 그것은 정말로 다른 문제입니다. –

-1

루프의 모든 값 다음에 새로운 행을 작성합니다. 매번 새로운 라인을 작성하기 때문에 한 라인의 여분 라인이 보입니다.

+0

메모장 + +를 사용하여 파일을 엽니 다. 거기 라인 번호가 있기 때문에 2 개 이상의 라인이 있다는 것을 분명히 볼 수 있습니다. – user7201762

+0

OK, 특정 값은 새로운 라인 문자 인 바이트를 포함합니다. 즉, 680202와 같이 여러 줄을 만듭니다. 스트레이트 바이트. ControlAltDel이 제안한대로 10 파운드 기호와 같은 시작/중지 표시기를 삽입하거나 문자열 값을 암호화 할 수 있습니다. – karakuricoder