关于BitmapFactory.decodeStream方法,流的位置将是读取编码数据后的位置。因此,我可以将一些额外的数据保存到流中,然后读取它。
这是将位图和数字保存到一个文件中的代码:
val path = File(cacheDir, "test")
val bitmap = BitmapFactory.decodeResource(resources, R.drawable.paper_background_yellow)
val outputStream = FileOutputStream(path)
val dataOutputStream = DataOutputStream(outputStream)
val result = bitmap.compress(Bitmap.CompressFormat.JPEG, 100, dataOutputStream)
dataOutputStream.writeInt(6306)
dataOutputStream.close()
但是当我使用BitmapFactory.decodeStream
读取位图时,它读取了整个流,因此当我读取数字时,它给了我一个例外:
java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:200)
at java.io.DataInputStream.readInt(DataInputStream.java:389)
这是读取位图和数字的代码:
val dataInputStream = DataInputStream(FileInputStream(path))
val theBitmap = BitmapFactory.decodeStream(dataInputStream)
var number = dataInputStream.readInt() //the crash happened.
dataInputStream.close()
我认为流的位置应该在仅对位图进行解码的位置,并且我可以读取该位置之后的数字。但是似乎BitmapFactory.decodeStream
会读取整个流。
为什么该方法读取整个流,并且在位图解码后如何读取数字?