标签: inputstream

Java中的InputStream的多个读者

我有一个InputStream,我正在读取字符.我希望多个读者访问此InputStream.似乎一种合理的方法是将传入的数据写入StringBuffer或StringBuilder,并让多个读者读取它.不幸的是,不推荐使用StringBufferInputStream.StringReader读取一个字符串,而不是一个不断更新的可变对象.我有什么选择?写我自己的?

java io inputstream

12
推荐指数
4
解决办法
2万
查看次数

如何在文件中的特定位置写入内容

假设我有一个名为abhishek.txt的文件,其中包含以下行

我是,你叫什么名字.

现在我想写

阿布舍克

在"我"之后,就像我是Abhishek,..如何直接在这个特定的位置写出内容.

java inputstream textinput fileinputstream

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

在Android流中使用flush()close()的好处?

我知道一般的想法,但我不确定它是否有影响,因为Android api声明如下:"刷新此流.此方法的实现应确保写出任何缓冲的数据.此实现什么都不做."

这种实现没有任何作用< - 这是否意味着它无用或者我错过了什么?

android inputstream outputstream

12
推荐指数
1
解决办法
1万
查看次数

Java Networking:在Socket中解释InputStream和OutputStream

我已经使用创建了一个服务器ServerSocket.之后,我创建了Client Socket,并连接到此服务器.

之后,我使用InputStream执行"一些东西",并从Socket Object获取OutputStream.但是,我真的不太了解inputStream和outputStream.这是我的简单代码:

private Socket sock = null;
private InputStream sockInput = null;
private OutputStream sockOutput = null;

...
            String msg = "Hello World";
            byte[] buffer = null;

            try {
                sockOutput.write(msg.getBytes(), 0, test.length());
                sockOutput.write("Hello StackOverFlow".getBytes(), 0, test.length());
                buffer = new byte[test.length()];
                sockInput.read(buffer, 0, test.length());
                System.out.println(new String(buffer));
                sockInput.read(buffer, 0, test.length());
                System.out.println(new String(buffer));
            } catch (IOException e1) {
                e1.printStackTrace();
                }
Run Code Online (Sandbox Code Playgroud)

结果将是:"Hello World"和"Hello StackOverFlow".

这是服务器端代码:

private int serverPort = 0;
    private ServerSocket serverSock = null;

    public VerySimpleServer(int serverPort) { …
Run Code Online (Sandbox Code Playgroud)

java sockets inputstream outputstream

12
推荐指数
2
解决办法
4万
查看次数

将InputStream转换为byte []的最有效方法?

ChannelBufferInputStream responseStream = (ChannelBufferInputStream) response.getBodyAsStream();
ArrayList<Byte> arrayList = new ArrayList<Byte>();
try {
    while (responseStream.available() > 0) {
        arrayList.add(responseStream.readByte());
    }
} catch (IOException e) {
    e.printStackTrace();
    return internalServerError();
}
Iterator<Byte> iterator = arrayList.iterator();
byte[] bytes = new byte[arrayList.size()];
int i = 0;
while (iterator.hasNext()) {
    bytes[i++] = iterator.next();
}
Run Code Online (Sandbox Code Playgroud)

在我的Web应用程序的每个页面加载时调用此代码.它似乎运行得非常快,但是有什么能让它运行得更快吗?

编辑 - 使用字节数组输出流更新

ChannelBufferInputStream responseStream = (ChannelBufferInputStream) response.getBodyAsStream();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try {
    int read = responseStream.read();
    while (read != -1) {
        byteArrayOutputStream.write(read);
        read = responseStream.read();
    }
} catch …
Run Code Online (Sandbox Code Playgroud)

java inputstream

12
推荐指数
2
解决办法
4万
查看次数

Android openRawResource()不适用于drawable

我正在尝试通过这样做来创建输入流

InputStream is = (InputStream) getResources().openRawResource(R.drawable.image1);
Run Code Online (Sandbox Code Playgroud)

但我遇到了关于我的drawable文件(R.drawable.image1)的错误"类型原始的预期资源".image1是一个png,位于我的res/drawable文件夹中.

有任何想法吗???

android image inputstream drawable

12
推荐指数
2
解决办法
1万
查看次数

如何表示一个空的InputStream

我正在减少InputStreams像这样的流:

InputStream total = input.collect(
    Collectors.reducing(
        empty,
        Item::getInputStream, 
        (is1, is2) -> new SequenceInputStream(is1, is2)));
Run Code Online (Sandbox Code Playgroud)

为了身份InputStream,我正在使用:

InputStream empty = new ByteArrayInputStream(new byte[0]);
Run Code Online (Sandbox Code Playgroud)

这有效,但有没有更好的方法来表示空InputStream

java inputstream java-stream

12
推荐指数
3
解决办法
7246
查看次数

从InputStream读取时发生IOException

我在从Android平台上的InputStream读取时遇到了一个奇怪的问题.我不确定这是Android特定的问题,还是我一般都做错了.

唯一特定于Android的是此调用:

InputStream is = getResources().openRawResource(R.raw.myfile);
Run Code Online (Sandbox Code Playgroud)

这将从Android资产返回文件的InputStream.无论如何,这是我遇到问题的地方:

bytes[] buffer = new bytes[2];
is.read(buffer);
Run Code Online (Sandbox Code Playgroud)

当read()执行时抛出IOException.奇怪的是,如果我执行两个连续的单字节读取(或任意数量的单字节读取),则没有例外.例如,这有效:

byte buffer;
buffer = (byte)buffer.read();
buffer = (byte)buffer.read();
Run Code Online (Sandbox Code Playgroud)

任何想法为什么两个连续的单字节读取工作,但一次调用同时读取两个引发异常?该InputStream中似乎罚款... is.available()回报超过一百万个字节(因为它应该).

堆栈跟踪显示在以下行之前的这些行InputStream.read():

java.io.IOException
at android.content.res.AssetManager.readAsset(Native Method)
at android.content.res.AssetManager.access$800(AssetManager.java:36)
at android.content.res.AssetManager$AssetInputStream.read(AssetManager.java:542)
Run Code Online (Sandbox Code Playgroud)

将缓冲区大小更改为单个字节仍会引发错误.看起来只有在读入字节数组时才会引发异常.

如果我将文件截断为100,000字节(文件最初为:1,917,408字节),它可以正常工作.超过一定大小的文件有问题吗?

任何帮助表示赞赏!
谢谢!

java android inputstream ioexception

11
推荐指数
1
解决办法
2万
查看次数

使用FileChannel写入任何InputStream?

我可以将任何InputStream写入FileChannel吗?

我正在使用java.nio.channels.FileChannel打开文件并将其锁定,然后将InputStream写入输出文件.InputStream可以由另一个文件,URL,套接字或任何东西打开.我写了以下代码:

FileOutputStream outputStream = new FileOutputStream(outputFile);
FileChannel outputChannel = outputStream.getChannel();
FileLock lock = outputChannel.lock();
try {
    outputChannel.transferFrom(???);
} finally {
    lock.release();
    outputChannel.close();
    outputStream.close();
}
Run Code Online (Sandbox Code Playgroud)

但是,outputChannel.transferFrom(...)的第一个参数请求ReadableByteChannel对象.由于我使用InputStream作为输入,因此它没有inputStream.getChannel()方法来创建所需的通道.

有没有办法从InputStream获取ReadableByteChannel?

java filechannel inputstream filelock

11
推荐指数
2
解决办法
1万
查看次数

运行.jar时获取getResourceAsStream文件路径

我的代码:

BufferedInputStream bis =
  new BufferedInputStream(getClass().getResourceAsStream("playerhit.mp3"));
Run Code Online (Sandbox Code Playgroud)

playerhit.mp3文件与MP3.class运行时的包在同一个包中时,此代码可以正常工作.我将其作为.jar运行.如果我将文件路径更改为类似/src/data/audio/playerhit.mp3它不再起作用的东西.在以.jar身份运行时,是否仍然可以访问不同于文件包根目录的文件路径?

java jar inputstream filepath

11
推荐指数
1
解决办法
9959
查看次数