|
@@ -9,14 +9,15 @@ import com.yonge.mongodb.service.impl.BaseServiceImplWithMongo;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
-import java.io.BufferedReader;
|
|
|
-import java.io.File;
|
|
|
-import java.io.FileInputStream;
|
|
|
-import java.io.FileReader;
|
|
|
+import java.io.*;
|
|
|
import java.nio.ByteBuffer;
|
|
|
import java.nio.channels.FileChannel;
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
+import java.util.zip.ZipEntry;
|
|
|
+import java.util.zip.ZipFile;
|
|
|
+import java.util.zip.ZipInputStream;
|
|
|
|
|
|
@Service
|
|
|
public class HistoryMessageServiceImpl extends BaseServiceImplWithMongo<String, HistoryMessage> implements HistoryMessageService {
|
|
@@ -31,82 +32,128 @@ public class HistoryMessageServiceImpl extends BaseServiceImplWithMongo<String,
|
|
|
|
|
|
@Override
|
|
|
public void saveImHistoryMessage(File file) throws Exception {
|
|
|
- long length = file.length();
|
|
|
- if(length > 1048576){
|
|
|
+// long length = file.length();
|
|
|
+// if(length > 1048576){
|
|
|
doNioReadFile(file);
|
|
|
- }else {
|
|
|
- doBufferReadFile(file);
|
|
|
- }
|
|
|
+// }else {
|
|
|
+// doBufferReadFile(file);
|
|
|
+// }
|
|
|
}
|
|
|
|
|
|
- public void doBufferReadFile(File file) throws Exception
|
|
|
- {
|
|
|
- BufferedReader reader = null;
|
|
|
+// public static void main(String[] args) throws Exception {
|
|
|
+// doNioReadFile1(new File("/Users/chenxiaoyu/Documents/77fe9ce6-7d91-4568-afe3-9e8ac351e87f.zip"));
|
|
|
+// }
|
|
|
+
|
|
|
+ public void doNioReadFile(File file) {
|
|
|
+ ZipInputStream zin = null;
|
|
|
try {
|
|
|
- reader = new BufferedReader(new FileReader(file));
|
|
|
- String line = null;
|
|
|
- int num = 0;
|
|
|
+ zin = new ZipInputStream(new FileInputStream(file), StandardCharsets.UTF_8);
|
|
|
+ ZipFile zf = new ZipFile(file);
|
|
|
+ ZipEntry ze;
|
|
|
+ while ((ze = zin.getNextEntry()) != null) {
|
|
|
List<HistoryMessage> historyMessages = new ArrayList<>();
|
|
|
- while ((line = reader.readLine()) != null){
|
|
|
- try {
|
|
|
- historyMessages.add(JSONObject.parseObject(line.substring(line.indexOf("{")), HistoryMessage.class));
|
|
|
- if(historyMessages.size() >= 2000){
|
|
|
- historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
|
|
|
- historyMessages.clear();
|
|
|
+ BufferedReader br = new BufferedReader(new InputStreamReader(zf.getInputStream(ze)));
|
|
|
+ String line;
|
|
|
+ while ((line = br.readLine()) != null) {
|
|
|
+ try {
|
|
|
+ historyMessages.add(JSONObject.parseObject(line.substring(line.indexOf("{")), HistoryMessage.class));
|
|
|
+ if(historyMessages.size() >= 2000){
|
|
|
+ historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
|
|
|
+ historyMessages.clear();
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
|
- }catch (Exception e){
|
|
|
- e.printStackTrace();
|
|
|
}
|
|
|
- num++;
|
|
|
- }
|
|
|
- if(historyMessages.size() > 0){
|
|
|
- historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
|
|
|
+ if(historyMessages.size() > 0){
|
|
|
+ historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
|
|
|
+ }
|
|
|
+ br.close();
|
|
|
+ break;
|
|
|
}
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
} finally {
|
|
|
- reader.close();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- public void doNioReadFile(File file) throws Exception
|
|
|
- {
|
|
|
- String enterStr = "\n";
|
|
|
-
|
|
|
- FileChannel inChannel = new FileInputStream(file).getChannel();
|
|
|
- ByteBuffer buffer = ByteBuffer.allocate(1048576);
|
|
|
-
|
|
|
- StringBuilder newlinesBui = new StringBuilder();
|
|
|
- while (inChannel.read(buffer) != -1)
|
|
|
- {
|
|
|
- buffer.flip();
|
|
|
- //数据组合.
|
|
|
- String content = new String(buffer.array());
|
|
|
- newlinesBui.append(content).toString();
|
|
|
-
|
|
|
- int fromIndex = 0;
|
|
|
- int endIndex = -1;
|
|
|
- //循环找到 \n
|
|
|
- List<HistoryMessage> historyMessages = new ArrayList<>();
|
|
|
- while ((endIndex = newlinesBui.indexOf(enterStr, fromIndex)) > -1)
|
|
|
- {
|
|
|
- //得到一行
|
|
|
- String line = newlinesBui.substring(fromIndex, endIndex);
|
|
|
+ if (zin != null) {
|
|
|
try {
|
|
|
- historyMessages.add(JSONObject.parseObject(line.substring(line.indexOf("{")), HistoryMessage.class));
|
|
|
- if(historyMessages.size() >= 2000){
|
|
|
- historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
|
|
|
- historyMessages.clear();
|
|
|
- }
|
|
|
- }catch (Exception e){
|
|
|
+ zin.closeEntry();
|
|
|
+ } catch (IOException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
- fromIndex = endIndex + 1;
|
|
|
}
|
|
|
- if(historyMessages.size() > 0){
|
|
|
- historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
|
|
|
- }
|
|
|
- newlinesBui.delete(0, fromIndex);
|
|
|
- buffer.clear();
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+// public void doBufferReadFile(File file) throws Exception
|
|
|
+// {
|
|
|
+// BufferedReader reader = null;
|
|
|
+// try {
|
|
|
+//
|
|
|
+//// InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "GBK");
|
|
|
+// reader = new BufferedReader(new FileReader(file));
|
|
|
+// String line = null;
|
|
|
+// int num = 0;
|
|
|
+// List<HistoryMessage> historyMessages = new ArrayList<>();
|
|
|
+// while ((line = reader.readLine()) != null){
|
|
|
+// try {
|
|
|
+// historyMessages.add(JSONObject.parseObject(line.substring(line.indexOf("{")), HistoryMessage.class));
|
|
|
+// if(historyMessages.size() >= 2000){
|
|
|
+// historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
|
|
|
+// historyMessages.clear();
|
|
|
+// }
|
|
|
+// }catch (Exception e){
|
|
|
+// e.printStackTrace();
|
|
|
+// }
|
|
|
+// num++;
|
|
|
+// }
|
|
|
+// if(historyMessages.size() > 0){
|
|
|
+// historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
|
|
|
+// }
|
|
|
+// } finally {
|
|
|
+// reader.close();
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+
|
|
|
+// public static void doNioReadFile(File file) throws Exception
|
|
|
+// {
|
|
|
+// String enterStr = "\n";
|
|
|
+//
|
|
|
+// FileChannel inChannel = new FileInputStream(file).getChannel();
|
|
|
+// ByteBuffer buffer = ByteBuffer.allocate(1048576);
|
|
|
+//
|
|
|
+// StringBuilder newlinesBui = new StringBuilder();
|
|
|
+// while (inChannel.read(buffer) != -1)
|
|
|
+// {
|
|
|
+// buffer.flip();
|
|
|
+// //数据组合.
|
|
|
+// String content = new String(buffer.array());
|
|
|
+// newlinesBui.append(content).toString();
|
|
|
+//
|
|
|
+// int fromIndex = 0;
|
|
|
+// int endIndex = -1;
|
|
|
+// //循环找到 \n
|
|
|
+// List<HistoryMessage> historyMessages = new ArrayList<>();
|
|
|
+// while ((endIndex = newlinesBui.indexOf(enterStr, fromIndex)) > -1)
|
|
|
+// {
|
|
|
+// //得到一行
|
|
|
+// String line = newlinesBui.substring(fromIndex, endIndex);
|
|
|
+// try {
|
|
|
+// historyMessages.add(JSONObject.parseObject(line.substring(line.indexOf("{")), HistoryMessage.class));
|
|
|
+// if(historyMessages.size() >= 2000){
|
|
|
+//// historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
|
|
|
+// historyMessages.clear();
|
|
|
+// }
|
|
|
+// }catch (Exception e){
|
|
|
+// e.printStackTrace();
|
|
|
+// }
|
|
|
+// fromIndex = endIndex + 1;
|
|
|
+// }
|
|
|
+// if(historyMessages.size() > 0){
|
|
|
+//// historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
|
|
|
+// }
|
|
|
+// newlinesBui.delete(0, fromIndex);
|
|
|
+// buffer.clear();
|
|
|
+// }
|
|
|
+// }
|
|
|
}
|