|
|
@@ -21,7 +21,7 @@ class TextFile(private val book: Book) {
|
|
|
@Throws(FileNotFoundException::class)
|
|
|
fun getChapterList(): ArrayList<BookChapter> {
|
|
|
var rulePattern: Pattern? = null
|
|
|
- if (book.charset == null || book.tocUrl.isNotEmpty()) {
|
|
|
+ if (book.charset == null || book.tocUrl.isEmpty()) {
|
|
|
LocalBook.getBookInputStream(book).use { bis ->
|
|
|
val buffer = ByteArray(BUFFER_SIZE)
|
|
|
var blockContent: String
|
|
|
@@ -65,16 +65,18 @@ class TextFile(private val book: Book) {
|
|
|
blockPos++
|
|
|
//如果存在Chapter
|
|
|
if (pattern != null) {
|
|
|
- //将数据转换成String, 不能超过length
|
|
|
- blockContent = String(buffer, 0, bufferStart + length, charset)
|
|
|
- val lastN = blockContent.lastIndexOf("\n")
|
|
|
- if (lastN > 0) {
|
|
|
- blockContent = blockContent.substring(0, lastN)
|
|
|
- val blockContentSize = blockContent.toByteArray(charset).size
|
|
|
- buffer.copyInto(buffer, 0, blockContentSize - bufferStart, length)
|
|
|
- bufferStart = length + bufferStart - blockContentSize
|
|
|
- length = blockContentSize
|
|
|
+ var end = bufferStart + length
|
|
|
+ for (i in bufferStart + length - 1 downTo 0) {
|
|
|
+ if (buffer[i] == BLANK) {
|
|
|
+ end = i
|
|
|
+ break
|
|
|
+ }
|
|
|
}
|
|
|
+ //将数据转换成String, 不能超过length
|
|
|
+ blockContent = String(buffer, 0, end, charset)
|
|
|
+ buffer.copyInto(buffer, 0, end, bufferStart + length)
|
|
|
+ bufferStart = bufferStart + length - end
|
|
|
+ length = end
|
|
|
//当前Block下使过的String的指针
|
|
|
var seekPos = 0
|
|
|
//进行正则匹配
|
|
|
@@ -251,7 +253,7 @@ class TextFile(private val book: Book) {
|
|
|
private const val BLANK: Byte = 0x0a
|
|
|
|
|
|
//默认从文件中获取数据的长度
|
|
|
- private const val BUFFER_SIZE = 512 * 1024
|
|
|
+ private const val BUFFER_SIZE = 512000
|
|
|
|
|
|
//没有标题的时候,每个章节的最大长度
|
|
|
private const val MAX_LENGTH_WITH_NO_CHAPTER = 10 * 1024
|