Java 如何从下载的临时文件中获取字节数组?

Java 如何从下载的临时文件中获取字节数组?,java,android,sqlite,azure,download,Java,Android,Sqlite,Azure,Download,我正在尝试从临时文件获取字节数组。我知道我的连接是有效的,因为我得到了映射字符串的正确值。但我一直得到一个空字节数组。请帮忙!非常感谢您的帮助 package packagename import android.content.Context; import android.os.AsyncTask; import android.util.Log; import com.microsoft.azure.storage.CloudStorageAccount; import com.micro

我正在尝试从临时文件获取字节数组。我知道我的连接是有效的,因为我得到了映射字符串的正确值。但我一直得到一个空字节数组。请帮忙!非常感谢您的帮助

package packagename
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import com.microsoft.azure.storage.CloudStorageAccount;
import com.microsoft.azure.storage.blob.CloudBlob;
import com.microsoft.azure.storage.blob.CloudBlobClient;
import com.microsoft.azure.storage.blob.CloudBlobContainer;
import com.microsoft.azure.storage.blob.ListBlobItem;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Hashtable;
import java.util.Map;

public class Getfilereference extends AsyncTask<Map<String,byte[]>,Void,Map<String,byte[]>> {
    public Context mContext;

    public Getfilereference(Context context) {
        mContext = context;
    }

    @Override
    protected Map<String, byte[]> doInBackground(Map<String, byte[]>... params) {
        Map<String, byte[]> dictionary = new Hashtable<>();
        try {
            final String storageConnectionString =
                    "myconnectionstring";
            final String azureblobstoragecontainername = "mycontainer";
            CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);
            CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
            CloudBlobContainer container = blobClient.getContainerReference(azureblobstoragecontainername);
            for (ListBlobItem blobItem : container.listBlobs()) {
                if (blobItem instanceof CloudBlob) {
                    File file;
                    file = File.createTempFile("familyimages", null, mContext.getCacheDir());
                    CloudBlob blob = (CloudBlob) blobItem;
                    blob.download(new FileOutputStream(file + "\\" + blob.getName()));
                    FileInputStream fis = new FileInputStream(file + "\\" + blob.getName());
                    byte[] t = new byte[(file + "\\" + blob.getName()).length()];
                    fis.read(t);
                    fis.close();
                    dictionary.put(blob.getName(), t);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return dictionary;
    }

    @Override
    protected void onPostExecute(Map<String, byte[]> dictionary2) {
        DirectoryOpenHelper dbhelper = new DirectoryOpenHelper(mContext);
        for (Map.Entry<String, byte[]> entry : dictionary2.entrySet()) {
            String key = entry.getKey();
            byte[] value = entry.getValue();
            dbhelper.openDB();
            dbhelper.insertfamilyimageinrow(value, Integer.valueOf(key));
            Log.i("Info",key);
        }
    }
}
packagename
导入android.content.Context;
导入android.os.AsyncTask;
导入android.util.Log;
导入com.microsoft.azure.storage.CloudStorageAccount;
导入com.microsoft.azure.storage.blob.CloudBlob;
导入com.microsoft.azure.storage.blob.CloudBlobClient;
导入com.microsoft.azure.storage.blob.CloudBlobContainer;
导入com.microsoft.azure.storage.blob.ListBlobItem;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileOutputStream;
导入java.util.Hashtable;
导入java.util.Map;
公共类Getfilereference扩展了异步任务{
公共语境;
公共Getfilereference(上下文){
mContext=上下文;
}
@凌驾
受保护的地图doInBackground(地图…参数){
映射字典=新哈希表();
试一试{
最终字符串存储连接字符串=
“myconnectionstring”;
最终字符串azureblobstoragecontainername=“mycontainer”;
CloudStorageAccount-storageAccount=CloudStorageAccount.parse(storageConnectionString);
CloudBlobClient blobClient=storageAccount.createCloudBlobClient();
CloudBlobContainer container=blobClient.getContainerReference(azureblobstoragecontainername);
对于(ListBlobItem blobItem:container.listBlobs()){
if(CloudBlob的blobItem实例){
文件;
file=file.createTempFile(“familyimages”,null,mContext.getCacheDir());
CloudBlob blob=(CloudBlob)blobItem;
下载(新文件输出流(文件+“\\”+blob.getName());
FileInputStream fis=新的FileInputStream(文件+“\\”+blob.getName());
byte[]t=新字节[(文件+“\\”+blob.getName()).length()];
fis.read(t);
fis.close();
dictionary.put(blob.getName(),t);
}
}
}捕获(例外e){
e、 printStackTrace();
}
返回字典;
}
@凌驾
受保护的void onPostExecute(映射字典2){
DirectoryOpenHelper dbhelper=新的DirectoryOpenHelper(mContext);
对于(Map.Entry:dictionary2.entrySet()){
String key=entry.getKey();
字节[]值=entry.getValue();
dbhelper.openDB();
dbhelper.insertfamilyimageinrow(value,Integer.valueOf(key));
Log.i(“信息”,键);
}
}
}
我更换了

byte[] t = new byte[(file + "\\" + blob.getName()).length()]; 
fis.read(t); fis.close(); dictionary.put(blob.getName(), t); 


此问题的一个常见原因是读取流的指针位于流的末尾。您可以尝试将指针定位到流的开头吗?我应该将读卡器放在哪里?尝试检查这一行之后
fis
的位置-
FileInputStream fis=new FileInputStream(file+“\\”+blob.getName())
;或者试试这里提到的:。:)那么是什么解决了这个问题呢?我很想知道。当你说你得到一个空字节数组时,哪个表达式返回空字节?
RandomAccessFile f = new RandomAccessFile(file+"\\"+blob.getName(), "r");
byte[] b = new byte[(int)f.length()]; f.read(b);
dictionary.put(blob.getName(), b);