我有一个String我想用作的InputStream.在Java 1.0中,你可以使用java.io.StringBufferInputStream,但是@Deprecrated(有充分的理由 - 你不能指定字符集编码):
此类不能将字符正确转换为字节.从JDK 1.1开始,从字符串创建流的首选方法是通过
StringReader类.
您可以创建一个java.io.Readerwith java.io.StringReader,但没有适配器可以创建Reader和创建InputStream.
我找到了一个古老的虫子,要求一个合适的替代物,但是没有这样的东西存在 - 据我所知.
经常建议的解决方法是java.lang.String.getBytes()用作输入java.io.ByteArrayInputStream:
public InputStream createInputStream(String s, String charset)
throws java.io.UnsupportedEncodingException {
return new ByteArrayInputStream(s.getBytes(charset));
}
Run Code Online (Sandbox Code Playgroud)
但这意味着将整个String内存实现为一个字节数组,并且无法实现流的目的.在大多数情况下,这不是什么大问题,但我一直在寻找能够保留流的意图的东西 - 尽可能少的数据在内存中实现(重新).
我需要对UTF-16字节数组进行编码/解码java.lang.String.字节数组通过字节顺序标记(BOM)提供给我,我需要使用BOM编码字节数组.
此外,因为我正在处理Microsoft客户端/服务器,所以我想以小端(以及LE BOM)发出编码,以避免任何误解.我确实意识到使用BOM它应该工作大端,但我不想在Windows世界游泳上游.
作为一个例子,这里是其编码的方法java.lang.String作为UTF-16与BOM小端:
public static byte[] encodeString(String message) {
byte[] tmp = null;
try {
tmp = message.getBytes("UTF-16LE");
} catch(UnsupportedEncodingException e) {
// should not possible
AssertionError ae =
new AssertionError("Could not encode UTF-16LE");
ae.initCause(e);
throw ae;
}
// use brute force method to add BOM
byte[] utf16lemessage = new byte[2 + tmp.length];
utf16lemessage[0] = (byte)0xFF;
utf16lemessage[1] = (byte)0xFE;
System.arraycopy(tmp, 0,
utf16lemessage, 2,
tmp.length);
return utf16lemessage;
}
Run Code Online (Sandbox Code Playgroud)
在Java中执行此操作的最佳方法是什么?理想情况下,我希望避免将整个字节数组复制到一个新的字节数组中,该数组在开头分配了两个额外的字节.
解码这样的字符串也是如此,但使用java.lang.String构造函数 …
我想编写一个简单的批处理脚本来加载Visual Studio构建环境vcvars32.bat,然后继续使用构建vcbuild.但是,我的脚本将不会执行调用vcvars32.bat.我得到的最后一个输出是:
Setting environment for using Microsoft Visual Studio 2008 x86 tools.
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在使用Visual Studio 2008.这是我最简单的批处理脚本:
@echo off
"C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat"
vcbuild
Run Code Online (Sandbox Code Playgroud) 我尝试将TestNG与Apache Ivy一起使用,但未成功.这是我的ivy.xml:
<ivy-module version="2.0">
<info organisation="me" module="myproject"/>
<dependencies>
<dependency org="org.testng" name="testng" rev="5.8" />
</dependencies>
</ivy-module>
Run Code Online (Sandbox Code Playgroud)
这无法实际下载TestNG jar文件.这似乎是因为TestNG有一个jdk14和jdk15的jar文件.这是以下输出ivy:retrieve:
[ivy:retrieve] :: resolving dependencies :: me#myproject;working@jared-mbp17
[ivy:retrieve] confs: [default]
[ivy:retrieve] found org.testng#testng;5.8 in public
[ivy:retrieve] :: resolution report :: resolve 1139ms :: artifacts dl 11ms
---------------------------------------------------------------------
| | modules || artifacts |
| conf | number| search|dwnlded|evicted|| number|dwnlded|
---------------------------------------------------------------------
| default | 1 | 1 | 1 | 0 || 1 | 0 |
--------------------------------------------------------------------- …Run Code Online (Sandbox Code Playgroud) 为什么这段代码:
#include <stdio.h>
int main(int argc, char** argv) {
printf("%lld\n", 4294967296LL);
}
Run Code Online (Sandbox Code Playgroud)
为Windows发出此信息:
0
Run Code Online (Sandbox Code Playgroud)
但这适用于Linux:
4294967296
Run Code Online (Sandbox Code Playgroud) 假设我有一个ivy.xml包含以下内容:
<dependency org="checkstyle" name="checkstyle" rev="4.3" />
Run Code Online (Sandbox Code Playgroud)
然后我想升级到Checkstyle 4.4,所以我将我ivy.xml改为包含:
<dependency org="checkstyle" name="checkstyle" rev="4.4" />
Run Code Online (Sandbox Code Playgroud)
在retrieve第一次配置之后,我有了文件checkstyle-4.3.jar.第二次配置后,我也有文件checkstyle-4.4.jar,文件checkstyle-4.3.jar仍然存在.
有没有办法让Ivy意识到旧文件是一个孤儿,并将其从lib目录中删除?我的想法是,每次升级工具时,我都不希望开发人员的磁盘空间使用率大幅增加.
理想情况下,我也希望它从本地存储库中删除.我确实意识到本地存储库的意图是它在项目之间共享,因此删除任何东西都没有意义,因为它不知道该工件是否仍在其他项目中使用.但必须有某种修剪程序......
下面是包含可变参数函数和调用可变参数函数的代码.我希望它会适当地输出每个数字序列.它在编译为32位可执行文件时执行,但在编译为64位可执行文件时则不会.
#include <stdarg.h>
#include <stdio.h>
#ifdef _WIN32
#define SIZE_T_FMT "%Iu"
#else
#define SIZE_T_FMT "%zu"
#endif
static void dumpargs(size_t count, ...) {
size_t i;
va_list args;
printf("dumpargs: argument count: " SIZE_T_FMT "\n", count);
va_start(args, count);
for (i = 0; i < count; i++) {
size_t val = va_arg(args, size_t);
printf("Value=" SIZE_T_FMT "\n", val);
}
va_end(args);
}
int main(int argc, char** argv) {
(void)argc;
(void)argv;
dumpargs(1, 10);
dumpargs(2, 10, 20);
dumpargs(3, 10, 20, 30);
dumpargs(4, 10, 20, 30, 40);
dumpargs(5, 10, 20, …Run Code Online (Sandbox Code Playgroud)