我想使用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""
我如何克服这场冲突?
答案 0 :(得分:1)
如果您想要实际的资产文件大小,您需要做两件事:
1st:设置文件不要压缩
示例,将扩展名更改为唯一的内容,即.utxt
将这些文件扩展名设置为不在应用包中压缩:
第二名:使用资产文件描述符:
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属性并读取整个流或分配一个大小小于流长度的缓冲区。