我正在研究一个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,并将其写入OutputStream的DataHandler.但是...... 当我打电话时,我无法找到一种方法来创建一个DataHandler返回非空的"空" ...OutputStreamgetOutputStream
有没有人这样做过?我很感激你能给我的任何帮助或者正确的方向.
我有一个问题,我需要快速比较两个输入流.
今天我有这样的功能:
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)
但它真的很慢.我想使用缓冲读取,但还没有想出一个好方法.
一些额外的东西使它更难:
我需要一个实用的解决方案 - 代码!:)
我必须使用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) 我读DDS纹理,但由于一次建成罐子我无法通过访问这些纹理url和file并有能力使用InputStream来代替.
所以我需要知道如何java.?nio.ByteBuffer从一个人那里获得一个java.io.InputStream.
Ps:无论通过第三方库,我只需要它工作
我正在重载输入流运算符以与Time类一起使用,并且如果输入与我预期的时间格式(hh:mm)不匹配,则希望手动设置输入流的failbit.可以这样做吗?怎么样?
谢谢!
我正在用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) 假设我有一个InputStream包含文本数据,我想将其转换为String(例如,所以我可以将流的内容写入日志文件).
采取InputStream并将其转换为最简单的方法是String什么?
public String convertStreamToString(InputStream is) {
// ???
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用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) 我正在尝试使用从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) 我正在将文件上传到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?任何帮助将不胜感激.
inputstream ×10
java ×8
outputstream ×2
amazon-s3 ×1
arraylist ×1
bytebuffer ×1
c++ ×1
compare ×1
debugging ×1
metadata ×1
process ×1
sockets ×1
stream ×1
text-files ×1
validation ×1
zip ×1