这是我试图解决的问题:
我有大约100个二进制文件(总共158KB,它们的大小大致相同+/- 50%).我需要有选择地只解析这些文件中的一些(在最坏的情况下可能是50,在其他情况下只有1到5).顺便说一句,这是在Android设备上.
在Java中执行此操作的最快方法是什么?
一种方法是将所有内容组合到一个文件中,然后使用文件搜索来获取每个单独的文件.那样文件打开只需要调用一次,这通常很慢.但是,为了知道每个文件的位置,需要在文件的开头有某种表 - 可以使用脚本生成 - 但是文件也需要在表中的索引中命令它们被连接起来,因此文件搜索不需要做太多工作(如果我错了,请纠正我).
更好的方法是使文件内存映射,然后表不必按顺序排序,因为内存映射文件可以随机访问(如果我错了,再次纠正我).
如果使用zip压缩,则创建该表将是不必要的,因为zip压缩已经创建了一个表.此外,所有文件都不必连接.我可以压缩目录,然后通过zip文件中的条目访问每个单独的文件.问题解决了.
除非zip文件没有内存映射,否则读取速度会慢,因为系统调用比直接内存访问慢(如果我错了,请纠正我).所以我得出结论,最好的解决方案是使用内存映射的zip存档.
但是,ZipFile条目返回一个InputStream以读取条目的内容.而MappedByteBuffer需求的RandomAccessFile其中一个文件名作为输入,而不是一个InputStream.
无论如何都要将内存映射到一个zip文件以便快速读取?或者是否有一个不同的解决方案来解决这个选择的文件?
谢谢
编辑:我测试了文件的打开,关闭和解析速度这里是我发现的统计数据:
Number of Files: 25 (24 for parse because garbage collection interrupted timing)
Total Open Time: 72ms
Total Close Time: 1ms
Total Parse Time: 515ms
(这有点偏向Parse,因为Parse缺少一个文件)
%Total time Open takes: 12%
%Total time Close takes: 0.17%
%Total time Parse takes: 88%
Avg time Open takes per file: 2.88ms
Avg time Close takes per file: …
Mac OS X 10.6.6客户端和服务器的服务器git版本是:1.7.3.5
返回的错误是:
Chris-Muenchs-Mac-Book-Pro:Desktop cmuench$ git clone http://example.com/is.git
Cloning into is...
Username:
Password:
error: The requested URL returned error: 401 (curl_result = 22, http_code = 401, sha1 = 8fbb19449c4388ae4b51594af3507bfd44c567d7)
error: Unable to find 8fbb19449c4388ae4b51594af3507bfd44c567d7 under http://example.com/is.git
Cannot obtain needed commit 8fbb19449c4388ae4b51594af3507bfd44c567d7
while processing commit 129e0ba31589356b9c4326907ddf7e11d7b6be18.
error: Fetch failed.
Run Code Online (Sandbox Code Playgroud)
上面引用的提交sha1存在于repo中,我可以通过文件系统克隆,但不能通过http或https克隆.
这是我的apache设置:(WebDav为ON)(在此片段上方定义)
<Location "/is.git">
AuthType Basic
<Limit GET HEAD OPTIONS CONNECT POST PROPFIND PUT DELETE PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Require group development
</Limit>
AuthName "is.git"
</Location>
Run Code Online (Sandbox Code Playgroud)
有想法该怎么解决这个吗?
我正在开展一个项目,我必须通过MATLAB使用附加的相机在平台上找到某个对象.我想过将平台用作网格,但我被告知使用相机的像素,我可以通过点击相机窗口/屏幕并选择某个像素(对象的位置)来精确地获得该位置将在相机窗口/屏幕上显示).
有没有办法计算对象的位置(点击像素)或有什么方法可以做到这一点?
我在asp.net mvc Grid(具体是telerik)上使用LINQ到NHibernate的IQueryable实现,我知道我需要为这个特定的网格急切地获取一些东西.
所以我的查询看起来像这样:
var query = from s in repository.Query<MyClass>()
orderby s.Property.Name, s.Name
select s;
query = query.Fetch(x => x.Property);
Run Code Online (Sandbox Code Playgroud)
现在,如果我执行query.ToList(),一切都很好,我可以验证它在集成测试中是否有效.
这很棒.
但是,如果我执行query.Count()或其他聚合查询的东西,我会得到一个异常:
查询指定的连接提取,但是提取的关联的所有者在选择列表中不存在[FromElement {显式,不是集合连接,获取连接,获取非延迟属性,classAlias = 0,role =,tableName = [Property] ,tableAlias = property1,origin = MyClass myclass0_,colums = {myclass0_.PropertyGuid,className = Property}}] [.Count(.Fetch(.ThenBy(.OrderBy(NHibernate.Linq.NhQueryable`1 [MyClass],Quote(( s,)=>(s.Property.Name)),),Quote((s,)=>(s.Name)),),Quote((x,)=>(x.Property)),), )]
我知道它试图告诉我,我不能急于获取Property,因为MyClass不在select中,但问题是Count()实际上是通过Grid调用的,并且从我的代码外部处理.
我应该做的就是给网格一个IQueryable,它应该能够自己处理分页,排序等.
还有其他人不得不用NHibernate Fetching解决这个问题,你是如何解决它的?
我使用apt-get install安装了JDK.我不知道我的jdk文件夹在哪里.我需要为此设置路径.有没有人知道这个位置?
我有一个使用DevicePolicyManager方法的设备管理应用程序.在一个特定的触发器上,我调用了带有flag = 0的wipeData方法(它的2.2 HTC令人难以置信).设备重新启动并擦除所有设备数据(非SD卡)以及任何已配置的Google帐户(在"设置" - >"帐户和同步"下列出).但是,我很惊讶地发现我仍然能够从电子邮件应用程序接收/发送我公司的电子邮件.我不得不手动转到电子邮件应用程序点击设置并删除我的帐户.任何想法,如果有任何错误.我虽然能够wipeData是企业的安全措施之一.如果仍然可以在远程擦除后访问企业电子邮件,那么它就变得毫无意义!我绝对惊呆了.只是为了确定,在发布之前,我重新运行了整个过程.配置了我的Exchange ActiveSync帐户,安装了我的设备管理应用程序并触发了wipeData功能.在重新启动和"数据擦除"时,我发现配置的帐户没有显示在帐户和同步中,但在电子邮件应用程序中它仍然配置,我能够发送接收消息.
再次,这发生在我的HTC Droid Incredible(Verizon)上.我还没有在任何其他设备上测试它.如果我接受测试更改,我会更新.
编辑: 我在Droid Pro以及HTC Evo上进行了测试.两者都被彻底擦干净了.所以看来这个问题是HTC Incredible特有的.我所拥有的是运行Android 2.2和HTC内核版本:2.6.32.15-g5e1ad8b htc-kernel @ and18-2#1
是否有内置函数从字符串中删除所有不能在Windows文件名中的字符或以某种方式替换它们?
例如function("Some:unicode\symbols")- >"Some-unicode-symbols"
可能重复:
.NET:ArrayList vs List
你好,
我在网上搜索并发现我的冲突答案,到目前为止还不清楚,哪一个更快List<T> or ArrayList<T>,是什么原因?
我猜测List<T>应该更快但不确定,因为在这种特定情况下甚至ArrayList<T>也被标记为通用类型.
非常感谢,Mani
我正在使用UIImagePickerController cameraOverlayView属性创建自定义相机UI .但是,我想保留一些现有的用户界面 - 特别是顶部的闪光灯和相机选择按钮.
我的想法是,我会继续showsCameraControls = YES设置cameraOverlayView我的自定义用户界面,然后[picker.view bringSubviewToFront:overlayView]用来确保底部的控件位于默认控件的顶部.
唉,这不起作用.我试过在没有运气的情况下将叠加层移动到各个地方的视图层次结构的前面.有没有UIImagePickerController可以实现这个目标的hackery?在自定义UI的同时,至少不能重用至少一些相机控件似乎是一种耻辱.
C#支持这个吗?这是什么语法?我希望这个属性的获取被密封(并不重要),并且这个集合是抽象的.我尝试了以下代码(语法不正确)来实现这个想法.
public sealed Texture target
{
get { return texture; }
}
public abstract Texture target { set; }
Run Code Online (Sandbox Code Playgroud)
和
public Texture target
{
sealed get { return texture; }
abstract set;
}
Run Code Online (Sandbox Code Playgroud)