大きなファイルをチャンクで読み込んでJSONに変換してSpring MVCコントローラに送信するコードがあります。私のメソッドは次のようになります。オフセットで開始し、noBytesでチャンク、結果は私が私のコントローラファイルチャンクをJavaのページに変換
の次と前のページネーションの仕事をするために問題を抱えていJSONに変換することが渡され、私のコントローラpublic String readByteBlock(File file, int offset, int noBytes) throws IOException {
InputStream in = new FileInputStream(file);
byte[] result = new byte[noBytes];
in.skip(offset);
in.read(result, 0, noBytes);
return FileSaver.byteArrayToString(result, noBytes);
}
に送信されます
@RequestMapping("/page/{id}")
@ResponseBody
File file = new File("C:/teste.txt");
FileSaver fs = new FileSaver();
int byteblock = 100;
int offset = 0;
if(id.equals("next")){
offset = (int) req.getSession().getAttribute("prevEndPos");
String s = fs.readByteBlock(file, offset, byteblock);
req.getSession().setAttribute("prevStartPos", offset);
req.getSession().setAttribute("prevEndPos", (offset + byteblock));
return s;
}
if(id.equals("prev")){
offset = (int) req.getSession().getAttribute("prevStartPos") - byteblock ;
if(offset < 0){
String s = fs.readByteBlock(file, 0, byteblock);
return s;
}
String s = fs.readByteBlock(file, offset, byteblock);
req.getSession().setAttribute("prevStartPos", (offset - byteblock));
return s;
}
String s = fs.readByteBlock(file, 0, byteblock);
req.getSession().setAttribute("prevStartPos", offset);
req.getSession().setAttribute("prevEndPos", (offset + byteblock));
return s;
ファイルの各チャンクはmのhtmlテーブルに入れられますyアプリケーションでは、現在のブロックstartByteとendByteをセッションに保存しましたが、ユーザーが前のページのボタンを押すと、前のブロックの開始と終了位置を知ることができますか?セッションは現在のページを保持し、前のページは保持しないため、