我正在使用servelt上传一些图像文件.我想调整图像大小.我使用下面的行将源转换为BufferedImage.
InputStream imageStream = item.getInputStream();
BufferedImage imageBuffer = ImageIO.read(imageStream);
然后我调整图像大小并写入一个位置.但是,所有输出文件的大小都是0.
我使用以下代码来调整图像大小.
AffineTransform at = new AffineTransform();
if(sx != 0)
at.scale( sx , sx );
AffineTransformOp ato = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
uploadImage = ato.filter(uploadImage, null); //uploadImage == BufferedImage
Run Code Online (Sandbox Code Playgroud)
有没有什么好方法可以将输入流转换为bufferedImage而不会损坏图像?我确信图片上传了.但是,在转换为BufferedImage之后,该文件已损坏.
我通过向doPost()方法提交表单来上传.下面的行给出了一个列表项的InputStream.
InputStream imageStream = item.getInputStream();
而且,我正在写它
ImageIO.write(image, "jpg", new File(path + ".jpg"));
更新
java.awt.image.ImagingOpException: Unable to transform src image
at java.awt.image.AffineTransformOp.filter(Unknown Source)
at com.pricar.servlet.imageupload.ImageUploadServlet.reSize(ImageUploadServlet.java:100)
at com.pricar.servlet.imageupload.ImageUploadServlet.doPost(ImageUploadServlet.java:74)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) …Run Code Online (Sandbox Code Playgroud) 我一直在使用java中的各种HTTP客户端从网站获取各种信息或使用Web服务(如谷歌地图地理编码器)
我正在使用的当前客户端是Apache 的HTTP Components客户端.
我一直想知道为什么没有.getText()或.getBytes()方法只是简单地给我网址的所有内容,而是有返回InputStream的方法.这是什么意思或原因?
这不像我一直与服务器通信,所以我将不得不继续检查流.HTTP是无状态的,那么为什么没有getText()/ getBytes()方法只是在收到HTTP响应的内容(如String或byte [])之后返回?
我开发了一个客户端 - 服务器java应用程序,我使用ObjectOutputStream和ObjectInputStream在客户端和服务器进程之间发送和接收数据.我需要发送数组或对象或原始数据,但当我使用ObjectOutputStream和ObjectInputStream发送和接收原始值(writeDouble(),readDouble(),writeUTF(),readUTF())时出现问题.该计划暂停并停止工作.为什么,问题是什么?
这些是我程序的一部分
// client program
ObjectOutputStream toServer;
ObjectInputStream fromServer;
// Establish connection with the server
Socket socket = new Socket(host, 7000);
// Create an output stream to the server
toServer = new ObjectOutputStream(socket.getOutputStream());
fromServer = new ObjectInputStream(socket.getInputStream());
double num1 = Double.parseDouble(jtf1.getText().trim());
double num2 = Double.parseDouble(jtf2.getText().trim());
try {
toServer.writeUTF("multiply");
toServer.writeDouble(num1);
toServer.writeDouble(num2);
double result = fromServer.readDouble();
res.setText(String.valueOf(result));
} catch (IOException ex) {
System.err.println(ex);
}
// server program
private ObjectOutputStream outputToClient;
private ObjectInputStream inputFromClient;
// Create a server socket
ServerSocket serverSocket …Run Code Online (Sandbox Code Playgroud) 我显然不知道问题出在哪里!首先我要求客户向我发送byte[]他要发送的长度,然后我读这个长度.
int i = 323292; // length of incoming Byte[]
byte[] b = new byte[i];
int readBytes=inputStream.read(b,0,b.length);
Run Code Online (Sandbox Code Playgroud)
但它始终保持阅读readBytes比我少.而且我确信客户端会发送整个邮件byte[].
我试着把它放在一个循环中,直到我读取的总字节数是i,但是在第二次迭代后我总是得到IndexOutOfBoundsException!这是代码
boolean flag = true;
int i = 323292;
int threshold = 0;
byte[] b = new byte[i];
int read = 0;
while (flag) {
if (threshold < i) {
System.out.println(threshold);
try {
read = inputStreamFromClient.read(b, threshold, b.length);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
threshold = threshold + read;
} else { …Run Code Online (Sandbox Code Playgroud) f=open("vmi","w")
f.write("asdf")
import os
os.path.getsize("vmi")
#0 byte
f.close()
os.path.getsize("vmi")
# 4 bytes
Run Code Online (Sandbox Code Playgroud)
在文件关闭之前,在程序执行时我可以找到丢失的4个字节?
我尝试提取一个附加在我的"src"文件夹中的文件.
所以我想从File获取Inputstream并将其写入例如c:/file.txt
我的代码:
InputStream is = Main.class.getResourceAsStream("test.txt");
OutputStream os = new FileOutputStream("c:/file.txt");
byte[] buffer = new byte[4096];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
os.close();
is.close();
Run Code Online (Sandbox Code Playgroud)
错误:
" Type mismatch: Eclipse cannot convert from java.io.InputStream to
org.omg.CORBA.portable.InputStream "
Run Code Online (Sandbox Code Playgroud)
谢谢
我在获得此代码InputStream并创建图像的地方有此代码:
Part file;
// more code
try {
InputStream is = file.getInputStream();
File f = new File("C:\\ImagenesAlmacen\\QR\\olaKeAse.jpg");
OutputStream os = new FileOutputStream(f);
byte[] buf = new byte[1024];
int len;
while ((len = is.read(buf)) > 0) {
os.write(buf, 0, len);
}
os.close();
is.close();
} catch (IOException e) {
System.out.println("Error");
}
Run Code Online (Sandbox Code Playgroud)
问题是,如果我从 InputStream
那么如何调整我从中获得的InputStream尺寸,然后创建该尺寸调整后的图像。我想将图像的最大面设置为180px并用该比例调整另一面的大小。
例:
图片= 289px * 206px
调整大小的图片= 180px* 128px
我对Android应用程序工作,所以我需要使用InputStream()读取TXT文件,但我也有几种方法,只有一起工作Scanner(),所以我需要一种方法来转换InputStream()到Scanner().
提前致谢.
我不知道这个主题是否与std :: thread库或流有关.看看下面的例子:
#include <thread>
#include <iostream>
void read(){
int bar;
std::cout << "Enter an int: ";
std::cin >> bar;
}
void print(){
std::cout << "foo";
}
int main(){
std::thread rT(read);
std::thread pT(print);
rT.join();
pT.join();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不在乎它是否会在执行read()函数之前或之后打印"foo"字符串.困扰我的是,当它在执行print()函数之前要求输入时,它实际上会挂起执行.我必须单击"输入"或用一些数据提供std :: cin才能看到"foo"字符串.下面您可以看到该程序行为的三种可能方案:
1.
>> Enter an int: //here I've clicked enter
>> foo
>> 12 //here I've written "12" and clicked enter
//end of execution
2.
>> fooEnter an int: 12 //here I've written "12" and clicked enter
//end of execution …Run Code Online (Sandbox Code Playgroud) 我有一个问题,下面的代码的设计模式的名称是什么.
FileInputStream fin = new FileInputStream("X.zip");
BufferedInputStream bin = new BufferedInputStream(fin);
ZipInputStream zin = new ZipInputStream(bin);
Run Code Online (Sandbox Code Playgroud)
谁能帮我 ?谢谢.
inputstream ×10
java ×8
file ×3
outputstream ×3
sockets ×2
c++ ×1
c++11 ×1
image ×1
networking ×1
python ×1
resize ×1
text ×1