标签: inputstream

如何将InputStream转换为DataHandler?

我正在研究一个java Web应用程序,其中文件将存储在数据库中.最初我们通过调用getBytes结果集来检索DB中已有的文件:

byte[] bytes = resultSet.getBytes(1);
...
Run Code Online (Sandbox Code Playgroud)

然后DataHandler使用明显的构造函数将此字节数组转换为a :

dataHandler=new DataHandler(bytes,"application/octet-stream");
Run Code Online (Sandbox Code Playgroud)

这很有用,直到我们开始尝试存储和检索更大的文件.将整个文件内容转储到一个字节数组中然后构建一个DataHandler只需要太多内存.

我的直接想法是在数据库中检索数据流,getBinaryStream并以某种方式将其InputStream转换DataHandler为内存有效的方式.不幸的是,似乎没有直接的方法将一个转换InputStream成一个DataHandler.另一个想法我一直在玩从读取数据块InputStream,并将其写入OutputStreamDataHandler.但是...... 当我打电话时,我无法找到一种方法来创建一个DataHandler返回非空的"空" ...OutputStreamgetOutputStream

有没有人这样做过?我很感激你能给我的任何帮助或者正确的方向.

java inputstream outputstream

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

快速比较输入流的方法

我有一个问题,我需要快速比较两个输入流.

今天我有这样的功能:

private boolean isEqual(InputStream i1, InputStream i2) throws IOException {

    try {
        // do the compare
        while (true) {
            int fr = i1.read();
            int tr = i2.read();

            if (fr != tr)
                return false;

            if (fr == -1)
                return true;
        }

    } finally {
        if (i1 != null)
            i1.close();
        if (i2 != null)
            i2.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

但它真的很慢.我想使用缓冲读取,但还没有想出一个好方法.

一些额外的东西使它更难:

  • 我不想将其中一个输入流读入内存(整个)
  • 我不想使用第三方库

我需要一个实用的解决方案 - 代码!:)

java compare inputstream

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

如何使用InputStream从ZIP读取文件?

我必须使用SFTP从ZIP存档(只有一个文件,我知道它的名称)中获取文件内容.我唯一拥有的是ZIP InputStream.大多数示例显示如何使用此语句获取内容:

ZipFile zipFile = new ZipFile("location");
Run Code Online (Sandbox Code Playgroud)

但正如我所说,我的本地机器上没有ZIP文件,我不想下载它.是否InputStream足以阅读?

UPD:这是我的方式:

import java.util.zip.ZipInputStream;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

public class SFTP {


    public static void main(String[] args) {

        String SFTPHOST = "host";
        int SFTPPORT = 3232;
        String SFTPUSER = "user";
        String SFTPPASS = "mypass";
        String SFTPWORKINGDIR = "/dir/work";
        Session session = null;
        Channel channel = null;
        ChannelSftp channelSftp = null;
        try {
            JSch jsch = new JSch();
            session = jsch.getSession(SFTPUSER, SFTPHOST, SFTPPORT);
            session.setPassword(SFTPPASS);
            java.util.Properties config …
Run Code Online (Sandbox Code Playgroud)

java zip inputstream

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

Java InputStream到ByteBuffer

我读DDS纹理,但由于一次建成罐子我无法通过访问这些纹理urlfile并有能力使用InputStream来代替.

所以我需要知道如何java.?nio.ByteBuffer从一个人那里获得一个java.io.InputStream.

Ps:无论通过第三方库,我只需要它工作

java bytebuffer inputstream

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

在C++中,您可以手动设置流的failbit吗?怎么样?

我正在重载输入流运算符以与Time类一起使用,并且如果输入与我预期的时间格式(hh:mm)不匹配,则希望手动设置输入流的failbit.可以这样做吗?怎么样?

谢谢!

c++ validation inputstream

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

Java - 如何将我的ArrayList写入文件,并将该文件读取(加载)到原始ArrayList?

我正在用Java编写一个程序,它显示了一系列的课后俱乐部(EG Football,Hockey - 由用户输入).俱乐部添加到以下内容ArrayList:

private ArrayList<Club> clubs = new ArrayList<Club>();
Run Code Online (Sandbox Code Playgroud)

通过以下方法:

public void addClub(String clubName) {
    Club club = findClub(clubName);
    if (club == null)
        clubs.add(new Club(clubName));
}
Run Code Online (Sandbox Code Playgroud)

'Club'是一个带有构造函数的类 - 名称:

public class Club {

    private String name;

    public Club(String name) {
        this.name = name;
    }

    //There are more methods in my program but don't affect my query..
}
Run Code Online (Sandbox Code Playgroud)

我的程序正在运行 - 它允许我在我的arraylist中添加一个新的Club对象,我可以查看arraylist,我可以删除任何我想要的等等.

但是,我现在想将该arrayList(俱乐部)保存到文件中,然后我希望能够稍后加载该文件并再次使用相同的arraylist.

我有两种方法(见下文),并一直试图让它工作,但没有任何帮助,任何帮助或建议将不胜感激.

保存方法(fileName由用户选择)

public void save(String fileName) throws FileNotFoundException {
    String tmp = clubs.toString();
    PrintWriter pw = …
Run Code Online (Sandbox Code Playgroud)

java inputstream outputstream arraylist text-files

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

如何在Java中将InputStream转换为String?

假设我有一个InputStream包含文本数据,我想将其转换为String(例如,所以我可以将流的内容写入日志文件).

采取InputStream并将其转换为最简单的方法是String什么?

public String convertStreamToString(InputStream is) { 
    // ???
}
Run Code Online (Sandbox Code Playgroud)

java inputstream stream

21
推荐指数
3
解决办法
7836
查看次数

无法从Java进程读取InputStream(Runtime.getRuntime().exec()或ProcessBuilder)

我正在尝试使用Java从外部启动一个进程,并且无法从其InputStream中读取任何内容.

如果我用"ls","ps"或"kill"等命令启动进程,一切正常.我可以在InputStream或Process的ErrorStream上启动该过程并获取信息.

如果我尝试使用像"ftp"或"telnet"这样的命令,则在尝试读取时,InputStream和ErrorStream都会阻塞我的程序.任何时候都不会通过这些流传递任何信息.

谁能解释一下这种行为?这些命令是不可能的,还是我的实现有问题?

     String processName = _configuration.getProgramCommand().getCommand();
   ProcessBuilder procBuilder = new ProcessBuilder(processName);   

   System.out.println("Starting process "+processName);   
   _proc = Runtime.getRuntime().exec(processName);// procBuilder.start();            

   if(!procBuilder.redirectErrorStream()) {    
    _errorWorker = new ProcessErrorWorker(_proc);
    _errorWorker.start();   
   }

   String proc_start_answer = _configuration.getNextCommand().getCommand();
   System.out.println("Waiting for process answer '"+proc_start_answer+"'");
   BufferedReader input = new BufferedReader(new InputStreamReader(_proc.getInputStream()));      

   String answer = "";  

   try {         
    System.out.println("inputstream ready: "+input.ready());
    answer+=input.readLine(); 
    System.out.println("process answer:  "+answer);
    input.close();        

   } catch(Exception e) {
    System.out.print(e.getMessage());     
   } 
Run Code Online (Sandbox Code Playgroud)

java inputstream process

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

Java创建一个新的ObjectInputStream块

我正在尝试使用从Socket检索的InputStream创建一个新的ObjectInputStream.这是我的代码:

这是我的MessageGetterSender类的构造函数.该程序没有到达Checkpoint 4.

public MessageGetterSender(Socket socket) {

    System.out.println("MessageGetterSender: Checkpoint 1");

    this.socket = socket;

    // Get input and output streams
    try {
        System.out.println("MessageGetterSender: Checkpoint 2");

        InputStream is = socket.getInputStream();

        System.out.println("MessageGetterSender: Checkpoint 3");

        this.in = new ObjectInputStream(is);

        System.out.println("MessageGetterSender: Checkpoint 4");

    } catch (IOException ioe) {
        System.out.println("Could not get ObjectInputStream on socket: " + socket.getLocalPort());
    }

    try {
        this.out = new ObjectOutputStream(socket.getOutputStream());
    } catch (IOException ioe) {
        System.out.println("Could not get ObjectOutputStream on socket: " + socket.getLocalPort());
    }

    System.out.println("MessageGetterSender: Checkpoint 5");
}
Run Code Online (Sandbox Code Playgroud)

我正在从我连接到服务器以获取套接字的类中实例化一个新的MessageGetterSender对象.这是相关的代码.它是InstantMessageClass的构造函数,即实例化MessageGetterSender对象的类:

public …
Run Code Online (Sandbox Code Playgroud)

java sockets debugging inputstream

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

如何设置InputStream内容长度

我正在将文件上传到Amazon S3存储桶.文件正在上传,但我得到以下警告.

警告:没有为流数据指定内容长度.流内容将缓冲在内存中,并可能导致内存不足错误.

所以我在代码中添加了以下行

metaData.setContentLength(IOUtils.toByteArray(input).length);
Run Code Online (Sandbox Code Playgroud)

但后来我得到了以下信息.我甚至都不知道这是警告还是什么.

数据读取的长度与预期的长度不同:dataLength = 0; expectedLength = 111992; includeSkipped = FALSE; in.getClass()= class sun.net.httpserver.FixedLengthInputStream; markedSupported = FALSE; 标记= 0; resetSinceLastMarked = FALSE; markCount = 0; resetCount = 0

如何将contentLength设置为InputSteam的metaData?任何帮助将不胜感激.

metadata inputstream amazon-s3 amazon-web-services

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