我编写了将对象序列化为JSON和BSON的代码.根据我的输出,生成的BSON的大小比JSON大.这是预期的吗?
从我的代码Bson.class
(使用杰克逊和bson4jackson)
private ByteArrayOutputStream baos = new ByteArrayOutputStream();
private BsonFactory fac = new BsonFactory();
private ObjectMapper mapper = new ObjectMapper(fac);
public Bson(Object obj) throws JsonGenerationException,
JsonMappingException, IOException {
mapper.writeValue(baos, obj);
}
public int size() {
return baos.size();
}
public String toString() {
byte[] bytes = baos.toByteArray();
return new String(bytes);
}
Run Code Online (Sandbox Code Playgroud)
从我的 Json.class
private ByteArrayOutputStream baos = new ByteArrayOutputStream();
private ObjectMapper mapper = new ObjectMapper();
public Json(Object obj) throws JsonGenerationException,
JsonMappingException, IOException {
mapper.writeValue(baos, obj);
}
Run Code Online (Sandbox Code Playgroud)
(size()
和 …
我一直在寻找代码高尔夫,并有一个想法尝试这个代码:
#define D #define
添加此行后,一切正常,但我将其扩展为:
#define D #define
D VALUE
Run Code Online (Sandbox Code Playgroud)
在这里我得到了5个编译错误.如果我D
改成#define
一切都很好,有人可以解释一下,为什么这段代码是非法的?
注意: 我使用的是VS2008编译器.
编辑: 经过一些答案,我看到我需要给出编译错误列表:
第一个错误显示D
不仅是define
,还包括#
.
或者是否有一些其他保护措施不能修改它们?
如果它们在只读存储器中是有意义的 - 这就是制作它们的原因const
,对吗?
我有一个wstring
声明如此:
// random wstring
std::wstring str = L"abcàdëefŸg€hhhhhhhµa";
Run Code Online (Sandbox Code Playgroud)
文字将是UTF-8编码,因为我的源文件是.
[编辑:根据Mark Ransom,情况不一定如此,编译器将决定使用什么编码 - 让我们假设我从例如UTF-8编码的文件中读取此字符串]
我非常希望将其转换为文件读取(当文本编辑器设置为正确的编码时)
abcàdëefŸg€hhhhhhhµa
Run Code Online (Sandbox Code Playgroud)
但是ofstream
不是很合作(拒绝接受wstring
参数),并且wofstream
据说需要知道语言环境和编码设置.我只想输出这组字节.通常如何做到这一点?
编辑:它必须是跨平台的,不应该依赖于UTF-8编码.我碰巧有一组存储在a中的字节wstring
,并希望输出它们.它很可能是UTF-16或纯ASCII.
有没有办法获得目录大小/文件夹大小而不实际遍历此目录并添加每个文件的大小?理想情况下想使用像boost这样的库,但win api也可以.
我几乎只用objective-c编程,几个月前我在box2d中编写了一点并说出" - >".这是什么意思?它不能是客观的 - 它必须来自c ++,因为box2d是c ++,我曾经看到有人在Objective-c代码中使用它,我似乎无法理解它做了什么.Google不支持非文字字符,所以我不可能谷歌它,因为我不知道它是什么.
我正在学习C++,我制作了一个新程序,我删除了一些代码,现在我的控制台窗口不会隐藏有没有办法让它在启动时隐藏,而不会看到它
#include <iostream>
#include <string>
using namespace std;
int main()
{
wcout << L"Hello"; // OK.
wcout << wstring(L"Hello"); // OK.
wcout << "Hello"; // OK. Why?
wcout << string("Hello"); // Error. Why?
}
Run Code Online (Sandbox Code Playgroud)
为什么std::wcout
接受一个狭窄的字符串文字作为其参数但不接受一个狭窄的字符串对象?
当我在支持软件浮动仿真(硬件浮点禁用)的32位powerpc内核中运行以下C++程序时,我得到了错误的条件评估.有人可以告诉我这里有什么潜在的问题吗?
#include <stdio.h>
int main() {
int newmax = 1;
if ((newmax + 0.0) > 256) {
printf("\nShouldn't be here\n");
} else {
printf("\nShould be here\n");
}
}
Run Code Online (Sandbox Code Playgroud)
编译:
powerpc-linux-g++ -msoft-float -c floating.cxx
powerpc-linux-g++ -o floating floating.o
Run Code Online (Sandbox Code Playgroud)
目标系统中的输出:
[linux:/]$ ./floating
Shouldn't be here
Run Code Online (Sandbox Code Playgroud) 我使用VS2008编写了以下程序:
#include <fstream>
int main()
{
std::wofstream fout("myfile");
fout << L"???????? ?????? Österreich ?????? ????" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时,IDE问我是否要将我的源文件保存为unicode,我说"是的,请".
然后我运行程序,myfile出现在我项目的文件夹中.我用记事本打开它,文件是空的.我记得记事本只支持ASCII数据.我用写字板打开它,它仍然是空的.最后,我内心的小天才敦促我查看文件大小,毫不奇怪它是0字节.所以我重建并重新启动了程序,没有任何效果.最后,我决定向StackOverflow上非常聪明的人询问我缺少的东西,我在这里:)
编辑:
在上述聪明人留下一些评论之后,我决定按照他们的建议重写这个程序:
#include <fstream>
#include <iostream>
int main()
{
std::wofstream fout("myfile");
if(!fout.is_open())
{
std::cout << "Before: Not open...\n";
}
fout << L"???????? ?????? Österreich ?????? ????" << std::endl;
if(!fout.good())
{
std::cout << "After: Not good...\n";
}
}
Run Code Online (Sandbox Code Playgroud)
建造它.跑吧.并且...控制台清楚地读到了,令我惊讶的是:"之后:不好......".所以我编辑了我的帖子以提供新的信息,并开始等待答案,这可以解释为什么这是我能做什么.:)