我已经开始在Java中使用VTD(我猜VTD-XML),而XPath读取它非常好.我现在遇到的问题是插入数据.让我们说我正在做以下事情:
VTDNav nav = preExistingGen.getNav();
AutoPilot pilot = new AutoPilot(nav);
pilot.selectXPath("/Something/SomethingElse");
if (pilot.evalXPath() != -1) {
XMLModifier modifier = new XMLModifier(nav);
modifier.insertAfterElement("<some>content</some>");
}
Run Code Online (Sandbox Code Playgroud)
我假设这是一个实时更新,将反映在VTDNav中.它看起来像我的理解是不正确的,因为只需插入元素含量无助于净资产值(如果我输出的VTDNav,它仍包含我的原始XML).我似乎能够处理新xml的唯一方法是从XMLModifier输出它.
modifier.outputAndReparse(); // Gives me a new VTDNav with the new content
Run Code Online (Sandbox Code Playgroud)
这里有什么我想念的吗?有更简单的方法吗?我希望能够插入新内容,然后立即获取新索引.我现有的代码(使用标准DOM类)有大量的插入和更新,我还需要知道文档中最后插入的元素的位置.不必outputAndReparse()每次然后找到插入的元素(我可能甚至无法保证)似乎并不像一个合理的解决方案.
我正在尝试决定如何设计我的应用程序.
我有大约300个类的实例,就像这样:
public class ParamValue {
protected String sValue = null;
protected short shValue = 0;
protected short mode = PARAM_VALUE_MODE_UNKNOWN;
/*
* ...
*/
}
Run Code Online (Sandbox Code Playgroud)
我有一组这些实例.我不知道这些短路真的需要2个字节,还是4个字节?
我需要通过AIDL传递这些对象的列表List<Parcelable>.包裹不能readShort()和writeShort(),它只能使用int.因此,在这里使用short我也必须手动将两个短裤装入一个int,包裹它,然后打开包装.看起来太突兀了.
你能否告诉我短路占用多少字节,在这里使用short而不是int是否有意义?
更新:
我为未来的读者更新了我的问题.
所以,我写了一个测试应用程序,我发现在我的情况下,绝对没有理由使用short,因为它需要相同的空间int.但是,如果我像这样定义短裤阵列:
protected short[] myValues[2];
Run Code Online (Sandbox Code Playgroud)
然后它比int数组占用更少的空间:
protected int[] myValues[2];
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写正确的意图过滤器.
我基本上熟悉意图,它们在我的应用程序中运行良好,但我想知道更好的方法.这是我需要做的:
我有一个拥有一些数据的应用程序.(来自ECU,发动机控制单元的数据)有两个活动:一个活动可以将数据显示为数字,另一个活动可以将其显示为图形.
让我们看看第一个活动.
第二个活动几乎相同,但第三个项目不同:它将数据显示为图形.
因此,我希望能够发送详细指定所有信息的意图,就像" 嘿Android,我需要将ECU数据显示为数字 ",然后应该打开第一个活动.
而且我还希望能够发送仅指定前两项的意图,就像" 嘿Android,我需要显示ECU数据 ",然后android应该询问用户应该打开哪些活动.
我的应用也应该能够回复其他应用.
实现这一切的更好方法是什么?
更新:这是我的xml.我应该指定<intent-filter>什么?
<activity
android:name=".MyActivity"
>
<intent-filter >
<!-- what should i specify here? -->
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
更新2:这是我正在尝试做的事情:我有一个应用程序Service,通过蓝牙与远程设备进行通信,并接收ECU数据.有一些简单的活动可以显示这些数据:正如我已经说过的,一个可以显示数字,另一个可以显示图形.该应用程序AIDL为任何其他应用程序提供了能够获取ECU数据的接口.
正如我所说,这些活动非常简单,它们只提供基本的用户界面.
比如,一个人希望这些数据显示为可移动指针指示器.没问题:他可以编写自己的Activity绑定我的Service数据,从中获取数据并显示他想要的方式.
然后,如果我发送Intent像" 嘿Android,我需要显示ECU数据 ",那么Android应该问我应该打开什么活动,我希望能够看到这个新的Activity.
我有通知声音的URI content://media/internal/audio/media/122,但是SoundPool不能使用URI,它只适用于文件路径的apk资源.
有没有办法从URI获取媒体文件路径?我试过Uri.getPath(),返回/internal/audio/media/122,但这不是有效的文件路径,当然SoundPool不适用于这样的补丁.
实际上通知的真正途径是/system/media/audio/notifications/allegro.ogg,我认为无法从URI中获取它content://media/internal/audio/media/122
或者我应该使用MediaPlayer它?我测试过,它有效:
MediaPlayer mp = MediaPlayer.create(this, "content://media/internal/audio/media/122");
mp.start();
Run Code Online (Sandbox Code Playgroud)
我很困惑因为MediaPlayer看起来太沉重而不能播放简短的通知声音,所以我更喜欢使用SoundPool.
如果我对MediaPlayer体重有误,请告诉我,并建议通过其URI播放通知声音的正确方法.
我有一个与 gcc 链接器相关的问题。
我正在处理嵌入式内容(PIC32),但 PIC32 的编译器和链接器基于 gcc,因此,“常规”gcc 链接器和 PIC32 链接器的主要内容应该是通用的。
为了节省闪存空间(这在微控制器上通常是不够的),我需要在引导加载程序中放置几个大函数,应用程序应该只通过指针调用这些函数。
所以,我需要在生成的代码中创建向量表。
我正在尝试获取函数的绝对地址并将其写入生成的代码,但仍然出现错误。
在下面的示例中,我试图获取函数的地址_formatted_write。
代码:
.user_addr_table _USER_ADDR_TABLE_ADDR :
{
KEEP(*(.user_addr_table))
LONG((ABSOLUTE(_formatted_write))); /* _formatted_write is a name of my function */
} > user_addr_table
Run Code Online (Sandbox Code Playgroud)
链接器返回错误:“ unresolvable symbol '_formatted_write' referenced in expression”。
我注意到如果我写了一些垃圾而不是_formatted_write,那么它会返回错误“ undefined symbol .....”,因此,_formatted_write链接器知道。
这让我觉得我应该执行一些额外的步骤以使其“可解决”。但仍然不知道如何做到这一点。
众所周知,我们可以:source当前缓冲:so %.
但有时我想:source只是缓冲区的一部分,而不是整个缓冲区.说,我刚给我添加了一些内容.vimrc,并希望获取该部分,但我不想重新提供所有其他内容.
我尝试了选择文本和:so (实际:'<,'>so),但它报告不允许范围.那么,怎么办呢?
当然,我可以将所需的部分保存到临时文件并获取它,但它显然很烦人.
我花了几个小时寻找流密码Rabbit的第三方实现中的 bug .有几个错误,但其中一个:
/**
* @param IV An array of 8 bytes
*/
public void setupIV(final byte[] IV) {
short[] sIV = new short[IV.length>>1];
for(int i=0;i<sIV.length;++i) {
sIV[i] = (short)((IV[i << 1] << 8) | IV[(2 << 1) + 1]);
}
setupIV(sIV);
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是字节IV[i << 1]被转换为int,但由于Java没有无符号类型,任何值>= 0x80都是错误的.比方说,字节0xff变成了0xffffffff,而不是0x000000ff上面代码的作者如何预期.
所以我添加了简单的功能:
private int byte2int(byte b){
int ret = b;
if (ret < 0){
ret += 256;
}
return ret;
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写短脚本,以及以下命令:
echo "aaa111 bbb111" | xargs -I {} echo {} | sed 's/111/222/g'
Run Code Online (Sandbox Code Playgroud)
回归aaa222 bbb222,这是我所期待的.
我期待下一个命令:
echo "aaa111 bbb111" | xargs -I {} echo $(echo {} | sed 's/111/222/g')
Run Code Online (Sandbox Code Playgroud)
返回相同,但它返回aaa111 bbb111!这是为什么?
UPD:我想要实现的目标:
我有很多文件,比如pic30-coff-gcc,pic30-coff-ag等等,我需要为每个文件创建一个符号链接,比如pic30-gcc- > pic30-coff-gcc等.
所以我写了这个:
ls|grep 'coff-'|xargs -I {} ln -s {} $(echo {} | sed 's/coff-//g')
Run Code Online (Sandbox Code Playgroud)
它不起作用:对于每个文件,它报告该文件存在.我检查了这样的命令:
ls|grep 'coff-'|xargs -I {} echo "ln -s {} $(echo {} | sed 's/coff-//g')"
Run Code Online (Sandbox Code Playgroud)
是的,这sed部分不起作用:
ln -s pic30-coff-gcc …Run Code Online (Sandbox Code Playgroud) 我试图达到相当琐碎的事:我需要存储的编译时间整数32位UNIX时间戳,但我已经找到了宏(__DATE__,__TIME__,__TIMESTAMP__)扩展到字符串,而不是整数.
看来,我们没有它(这对我来说很奇怪).我真的想要整数,而不是字符串.
获得它的最佳做法是什么?
UPD:
作为旁注:我做了嵌入式的东西,所以我没有足够的资源(比如128 KB的闪存),因此解析字符串真是个坏主意.
为什么我需要:我只需要拥有每个beta版本的唯一版本号.首先,hex文件将命名为my-firmware-v2-33-BETA-1397315745.hex,其次,当我需要在设备的屏幕上显示当前版本时,我可能希望以各种格式回显它.
可能我错过了一些东西,但我找不到任何信号不能接受右值参考的信息.
所以,我有一个具有以下信号声明的类:
signals:
void messageDecoded(HTDataMsg &&msg);
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时,我遇到了错误:
moc_htcodec.cpp: In static member function ‘static void HTCodec::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)’:
moc_htcodec.cpp:71:77: error: cannot bind ‘HTDataMsg’ lvalue to ‘HTDataMsg&&’
case 0: _t->messageDecoded((*reinterpret_cast< HTDataMsg(*)>(_a[1]))); break;
^
In file included from moc_htcodec.cpp:9:0:
../hterm_core/htcodec/htcodec.h:59:9: error: initializing argument 1 of ‘void HTCodec::messageDecoded(HTDataMsg&&)’
void messageDecoded(HTDataMsg &&msg);
^
make: *** [moc_htcodec.o] Error 1
Run Code Online (Sandbox Code Playgroud)
生成的moc文件中的代码确实是错误的:
void HTCodec::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
if (_c == QMetaObject::InvokeMetaMethod) {
HTCodec *_t = static_cast<HTCodec *>(_o);
switch (_id) {
case 0: …Run Code Online (Sandbox Code Playgroud)