优化
This commit is contained in:
@@ -215,6 +215,7 @@ class TextFile(private val book: Book) {
|
|||||||
var blockPos = 0
|
var blockPos = 0
|
||||||
//加载章节
|
//加载章节
|
||||||
var curOffset: Long = 0
|
var curOffset: Long = 0
|
||||||
|
var chapterPos = 0
|
||||||
//读取的长度
|
//读取的长度
|
||||||
var length: Int
|
var length: Int
|
||||||
val buffer = ByteArray(bufferSize)
|
val buffer = ByteArray(bufferSize)
|
||||||
@@ -232,14 +233,15 @@ class TextFile(private val book: Book) {
|
|||||||
//章节在buffer的偏移量
|
//章节在buffer的偏移量
|
||||||
var chapterOffset = 0
|
var chapterOffset = 0
|
||||||
//当前剩余可分配的长度
|
//当前剩余可分配的长度
|
||||||
var strLength = bufferStart + length
|
length += bufferStart
|
||||||
|
var strLength = length
|
||||||
//分章的位置
|
//分章的位置
|
||||||
var chapterPos = 0
|
chapterPos = 0
|
||||||
while (strLength > 0) {
|
while (strLength > 0) {
|
||||||
++chapterPos
|
++chapterPos
|
||||||
//是否长度超过一章
|
//是否长度超过一章
|
||||||
if (strLength > maxLengthWithNoToc) { //在buffer中一章的终止点
|
if (strLength > maxLengthWithNoToc) { //在buffer中一章的终止点
|
||||||
var end = bufferStart + length
|
var end = length
|
||||||
//寻找换行符作为终止点
|
//寻找换行符作为终止点
|
||||||
for (i in chapterOffset + maxLengthWithNoToc until length) {
|
for (i in chapterOffset + maxLengthWithNoToc until length) {
|
||||||
if (buffer[i] == blank) {
|
if (buffer[i] == blank) {
|
||||||
@@ -257,22 +259,21 @@ class TextFile(private val book: Book) {
|
|||||||
//设置偏移的位置
|
//设置偏移的位置
|
||||||
chapterOffset = end
|
chapterOffset = end
|
||||||
} else {
|
} else {
|
||||||
buffer.copyInto(
|
buffer.copyInto(buffer, 0, length - strLength, length)
|
||||||
buffer,
|
length -= strLength
|
||||||
0,
|
|
||||||
bufferStart + length - strLength,
|
|
||||||
bufferStart + length
|
|
||||||
)
|
|
||||||
length = bufferStart + length - strLength
|
|
||||||
bufferStart = strLength
|
bufferStart = strLength
|
||||||
break
|
strLength = 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//block的偏移点
|
//block的偏移点
|
||||||
curOffset += length.toLong()
|
curOffset += length.toLong()
|
||||||
//设置上一章的结尾
|
|
||||||
toc.lastOrNull()?.end = curOffset
|
|
||||||
}
|
}
|
||||||
|
//设置结尾章节
|
||||||
|
val chapter = BookChapter()
|
||||||
|
chapter.title = "第${blockPos}章(${chapterPos + 1})"
|
||||||
|
chapter.start = toc.lastOrNull()?.end ?: curOffset
|
||||||
|
chapter.end = chapter.start!! + bufferStart
|
||||||
|
toc.add(chapter)
|
||||||
}
|
}
|
||||||
if (toc.isEmpty()) {
|
if (toc.isEmpty()) {
|
||||||
return analyze()
|
return analyze()
|
||||||
|
|||||||
Reference in New Issue
Block a user