java - android 文件输入流 EOF

标签 java android exception

我正在像这样创建一个新的文件对象:

keystoreFile = new File(getDir("sslDir", Context.MODE_PRIVATE), "CAKeyStore.jks")

稍后,我尝试将文件用于输入流,如下所示:

 BufferedInputStream bufstream = new BufferedInputStream(new FileInputStream(keystoreFile));
            Log.d(TAG, "Available? " + bufstream.available());
            sslKeystore.load(bufstream , KEYSTORE_PASSWORD.toCharArray());

在 logcat 中我得到一个 EOF 异常,并且显示的“可用”字节为零

 Available? 0
07-09 18:00:13.090  11229-11229/de.blinkt.openvpn W/System.err﹕ java.io.EOFException
07-09 18:00:13.090  11229-11229/de.blinkt.openvpn W/System.err﹕ at libcore.io.Streams.readFully(Streams.java:83)
07-09 18:00:13.090  11229-11229/de.blinkt.openvpn W/System.err﹕ at java.io.DataInputStream.readInt(DataInputStream.java:103)
07-09 18:00:13.090  11229-11229/de.blinkt.openvpn W/System.err﹕ at com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi.engineLoad(BcKeyStoreSpi.java:799)
07-09 18:00:13.100  11229-11229/de.blinkt.openvpn W/System.err﹕ at java.security.KeyStore.load(KeyStore.java:589)

但是,如果我清除我的应用程序数据,然后再试一次,我就不会遇到问题。

我创建文件的方式是否有问题,以至于在重新加载应用程序时出现此 EOF 异常?

编辑:

实际创建文件的方法在这个函数中:

private void saveKeystore() {
    try {
        sslKeystore.store(new FileOutputStream(keystoreFile), KEYSTORE_PASSWORD.toCharArray());
    } catch (Exception e) {
        Log.d(TAG, "Unable to save keystore");
        e.printStackTrace();
    }
}

最佳答案

您需要自己关闭 FileOutputStream。 KeyStore.store() 不会为您做那件事。同上 FileInputStream 和 load()。请参阅 Javadoc 中的示例.

关于java - android 文件输入流 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24664478/

相关文章:

java - Hibernate 中的 AnnotationConfiguration 和 Configuration 有什么区别?

Android 媒体播放器 @ Samsung S i9000

java - 适用于不同屏幕尺寸的 Android 处理程序

java - 使用异常的迭代器

python - 为什么 math.pow 会导致 ValueError : math domain error?

java - 有没有从javascript到Java bean(spring bean)执行RPC的框架?

java - Android SDK中MapView的左上右下经纬度值

java - LibGDX OpenGL 问题

java - 从游戏结束屏幕返回到主要 Activity

javascript - 使用函数设置变量值的单行代码,如果为假则抛出异常