RAM에 다시로드하지 않고 이미 디스크에 직렬화 된 java의 Array 목록에 요소를 추가 할 수 있습니까? MySQL 파일에 데이터를로드하기 위해 XML 파일에서 데이터를 저장하는 데 필요합니다. XML 파일에는 여러 GB의 데이터가 있으며 문제는 데이터를 처리하기 위해 XML 파일의 모든 데이터를 저장해야한다는 것입니다.ArrayList를 Java의 RAM에로드하지 않고 Serialized ArrayList에 요소 추가
-1
A
답변
0
ArrayList
또는 그 밖의 다른 데이터 구조는 메모리 내 데이터 구조입니다. 따라서이 데이터 구조에 넣으려는 것이 무엇이든지간에 메모리 (RAM)에로드해야합니다.
메모리 크기 자체보다 많은 데이터를로드하는 방법을 알고 싶다면 일괄 적으로로드하는 것이 좋습니다. 예 : 메모리 제약 조건에 맞는 첫 번째 n
항목을로드 한 다음 처리하십시오. 완료되면 버리고 다음 배치를로드하는 등의 작업을 수행합니다.
+0
나는이 방법으로 가야만한다. 그러나 나는 누군가가 가능성을 안다는 것을 희망했다. 다른 방식으로 – arget888
0
XML 파일이 이미 GBs에 있기 때문에 더 나은 접근 방법은 XML 파일을 청크로 읽고 레코드 청크를 데이터베이스에 저장하는 것입니다. EOF에 도달 할 때까지 계속하십시오.
String encoding = "UTF-8";
int maxlines = 100;
BufferedReader reader = null;
BufferedWriter writer = null;
try {
reader = new BufferedReader(new InputStreamReader(new FileInputStream("/bigfile.txt"), encoding));
int count = 0;
for (String line; (line = reader.readLine()) != null;) {
if (count++ % maxlines == 0) {
close(writer);
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("/smallfile" + (count/maxlines) + ".txt"), encoding));
}
writer.write(line);
writer.newLine();
}
} finally {
close(writer);
close(reader);
}
ArrayList는 표준 Java 직렬화를 사용하여 직렬화됩니까? 대체 직렬화? 자신의 직렬화? XML 파일을 원래 Java 객체로로드해야합니까, 아니면 표준 XML 도구를 사용하여 XML 파일을 처리 할 수 있습니까? – RealSkeptic
Standard Java serializazion으로 직렬화하려고합니다. 나는 XML 파일을 행 단위로 처리하고 있는데, 램에로드하는 것이 크기 때문이다. 나는 모든 태그를 분석하고 그것을 배열에 저장한다. 숫양의 크기가 어떤 값을 초과하면이 배열을 디스크의 객체로 직렬화하고자한다. – arget888