小编Jar*_*aus的帖子

如何从java.lang.String获取java.io.InputStream?

我有一个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内存实现为一个字节数组,并且无法实现流的目的.在大多数情况下,这不是什么大问题,但我一直在寻找能够保留流的意图的东西 - 尽可能少的数据在内存中实现(重新).

java string inputstream

92
推荐指数
4
解决办法
8万
查看次数

如何使用BOM对UTF-16LE字节数组进行编码/解码?

我需要对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构造函数 …

java unicode byte-order-mark utf-16

22
推荐指数
3
解决办法
3万
查看次数

如何编写运行vcvars32.bat的构建批处理脚本,然后继续构建?

我想编写一个简单的批处理脚本来加载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)

windows vcbuild visual-studio

17
推荐指数
1
解决办法
8886
查看次数

如何在Apache Ivy中使用TestNG?

我尝试将TestNGApache 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)

java ant testng ivy

7
推荐指数
1
解决办法
1744
查看次数

Windows上%lld的问题

为什么这段代码:

#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)

c windows

6
推荐指数
1
解决办法
5915
查看次数

如何配置Apache Ivy来删除孤立工件?

假设我有一个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目录中删除?我的想法是,每次升级工具时,我都不希望开发人员的磁盘空间使用率大幅增加.

理想情况下,我也希望它从本地存储库中删除.我确实意识到本地存储库的意图是它在项目之间共享,因此删除任何东西都没有意义,因为它不知道该工件是否仍在其他项目中使用.但必须有某种修剪程序......

java ant ivy

6
推荐指数
1
解决办法
1277
查看次数

为什么这个可变参数函数在Windows x64上的第4个参数上失败?

下面是包含可变参数函数和调用可变参数函数的代码.我希望它会适当地输出每个数字序列.它在编译为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)

c windows

3
推荐指数
1
解决办法
1331
查看次数