From 39a1b43a46a8906cd15f7182219b8eabbae86858 Mon Sep 17 00:00:00 2001 From: gedoor Date: Thu, 6 Jan 2022 16:39:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/model/localBook/TextFile.kt | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/localBook/TextFile.kt b/app/src/main/java/io/legado/app/model/localBook/TextFile.kt index 5c798627c..f204b7754 100644 --- a/app/src/main/java/io/legado/app/model/localBook/TextFile.kt +++ b/app/src/main/java/io/legado/app/model/localBook/TextFile.kt @@ -15,6 +15,14 @@ import java.util.regex.Pattern class TextFile(private val book: Book) { + private val blank: Byte = 0x0a + + //默认从文件中获取数据的长度 + private val bufferSize = 512000 + + //没有标题的时候,每个章节的最大长度 + private val maxLengthWithNoToc = 10 * 1024 + private val tocRules = arrayListOf() private var charset: Charset = book.fileCharset() @@ -22,7 +30,7 @@ class TextFile(private val book: Book) { fun getChapterList(): ArrayList { val rulePattern: Pattern? = if (book.charset == null || book.tocUrl.isEmpty()) { LocalBook.getBookInputStream(book).use { bis -> - val buffer = ByteArray(BUFFER_SIZE) + val buffer = ByteArray(bufferSize) var blockContent: String var length = bis.read(buffer) book.charset = EncodingDetect.getEncode(buffer) @@ -55,10 +63,10 @@ class TextFile(private val book: Book) { var blockPos = 0 //读取的长度 var length: Int - val buffer = ByteArray(BUFFER_SIZE) + val buffer = ByteArray(bufferSize) var bufferStart = 0 //获取文件中的数据到buffer,直到没有数据为止 - while (bis.read(buffer, bufferStart, BUFFER_SIZE - bufferStart) + while (bis.read(buffer, bufferStart, bufferSize - bufferStart) .also { length = it } > 0 ) { blockPos++ @@ -66,7 +74,7 @@ class TextFile(private val book: Book) { if (pattern != null) { var end = bufferStart + length for (i in bufferStart + length - 1 downTo 0) { - if (buffer[i] == BLANK) { + if (buffer[i] == blank) { end = i break } @@ -160,11 +168,11 @@ class TextFile(private val book: Book) { while (strLength > 0) { ++chapterPos //是否长度超过一章 - if (strLength > MAX_LENGTH_WITH_NO_CHAPTER) { //在buffer中一章的终止点 + if (strLength > maxLengthWithNoToc) { //在buffer中一章的终止点 var end = length //寻找换行符作为终止点 - for (i in chapterOffset + MAX_LENGTH_WITH_NO_CHAPTER until length) { - if (buffer[i] == BLANK) { + for (i in chapterOffset + maxLengthWithNoToc until length) { + if (buffer[i] == blank) { end = i break } @@ -249,14 +257,6 @@ class TextFile(private val book: Book) { companion object { - private const val BLANK: Byte = 0x0a - - //默认从文件中获取数据的长度 - private const val BUFFER_SIZE = 512000 - - //没有标题的时候,每个章节的最大长度 - private const val MAX_LENGTH_WITH_NO_CHAPTER = 10 * 1024 - @Throws(FileNotFoundException::class) fun getChapterList(book: Book): ArrayList { return TextFile(book).getChapterList()