如何获得Xamarin Android的可用字节数

时间:2016-07-21 09:22:22

标签: c# android xamarin xamarin.android

我想使用this method来获取可从资产中读取JsonFile的估计字节数。

为此,我写了这段代码:

  string filename;
  Stream  mf =  Context.Assets.Open(filename);

问题是我不能将mf作为InputStream,因为Context.Assets.Open(filename);给出一个System.IO.Stream。

我需要将mf定义为InputStream,以便能够具有如下大小:

int size= mf.Available();

我也试过了:

InputStream  mf = AssetManager.Open(filename);

但我有错误#34; 属性,方法或非静态字段需要对象引用" AssetManager.Open""

我如何克服这场冲突?

2 个答案:

答案 0 :(得分:1)

如果您想要实际的资产文件大小,您需要做两件事:

1st:设置文件不要压缩

示例,将扩展名更改为唯一的内容,即.utxt

将这些文件扩展名设置为不在应用包中压缩:

enter image description here

第二名:使用资产文件描述符:

var fileFD = Assets.OpenFd("json.utxt");
Log.Debug("JSON", fileFD.Length.ToString());

答案 1 :(得分:0)

docs,你可以尝试这样的事情:

string content;
AssetManager assets = this.Assets;
using (StreamReader sr = new StreamReader (assets.Open ("read_asset.txt")))
{
    content = sr.ReadToEnd ();
}

这是上下文。

.NET Stream类没有类似于java available()方法的方法。事实上,java文档声明了L

  

请注意,虽然InputStream的某些实现将返回   流中的总字节数,很多都不会。永远不会   正确使用此方法的返回值来分配缓冲区   旨在保存此流中的所有数据。

  

类InputStream的可用方法始终返回0.

     

这个方法应该被子类覆盖。

总之,可用的方法是由子类实现的,并不总是保证返回可用的长度,因此不建议在分配缓冲区时使用它作为文档状态。

因此,您可以检查Stream.Length属性并读取整个流或分配一个大小小于流长度的缓冲区。