java 학습 노트 - 클래스 MyInputStream 구현(28)
14486 단어 Inputstream
public class TestDemo {
public static void main(String[] args) throws Exception {
InputStream in = new MyInputStream("d:/a/a.txt");
byte[] b = new byte[1024];
int len = 0;
while((len=in.read(b))!=-1){
String s = new String(b,0,len);
System.err.print(s);
}
in.close();
}
}
class MyInputStream extends InputStream { // inputstream , is a.
private InputStream in;
public MyInputStream(String fileName) {
try {
in = new FileInputStream(fileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public int read(byte[] b){
int len=-1;
try {
len = in .read(b);
} catch (IOException e) {
e.printStackTrace();
}
return len;
}
public void close(){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public int read() throws IOException {
return 0;
}
}
2 이하 포장을 통해close 방법에 대한 수정을 실현하여 회수 연결을 실현한다
1: Connection 인터페이스를 구현하고 하나의 Connection 멤버를 보유합니다.
2:close 메서드를 수정합니다.
3: 다른 방법은 구성원 변수의connection을 호출합니다.
public class MyDataSource implements DataSource {
private LinkedList<Connection> pool = new LinkedList<Connection>();
public MyDataSource() {
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql:///db909?characterEncoding=UTf8";
for (int i = 0; i < 3; i++) {
// ,// com.mysql.jdbc.JDBC4Connection@8888
Connection con = DriverManager.getConnection(url, "root",
"1234");
//
MyConn conn = new MyConn(con);
pool.add(conn);//
}
} catch (Exception e) {
e.printStackTrace();
}
}
// datasource,
public Connection getConnection() throws SQLException {
synchronized (pool) {
if (pool.size() == 0) {
try {
pool.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
return getConnection();
}
Connection con = pool.removeFirst();
System.err.println("siize:" + pool.size());
return con;
}
}
아래 포장connection
class MyConn implements Connection {
//
private Connection conn; //com.mysql.jdbc.Jdbc4Connection@1111
// MySql connection JDBC4Connection@8888
public MyConn(Connection con) {
this.conn = con;
}
//
public void close() throws SQLException {
synchronized (pool) {
// ,
System.err.println(" 。。。。"+this);
pool.add(this);
pool.notify();
}
}
}
3, 포장 처리 get 방식 의 난자
package cn.itcast.utils;
import java.io.IOException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
public class BaseServlet extends HttpServlet {
@Override
public void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String methodName = req.getParameter("cmd");
try{
Method mm = this.getClass().getMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);
//
MyRequest mr = new MyRequest(req);
mm.invoke(this,mr,resp);
}catch(Exception e){
e.printStackTrace();
}
}
}
// request
class MyRequest extends HttpServletRequestWrapper{
private HttpServletRequest req;
public MyRequest(HttpServletRequest request) {
super(request);
this.req=request;
}
// getparameter
@Override
public String getParameter(String name) {
String value = req.getParameter(name);
if(req.getMethod().equals("GET")){
System.err.println(" ");
try{
value = new String(value.getBytes("ISO-8859-1"),"UTF-8");
}catch(Exception e){
}
}
return value;
}
}
요약:
1: 대리나 포장은 모두 어떤 종류의 방법을 강화한다.
프록시: 지정한 인터페이스에 따라 메모리에 이 인터페이스의 하위 클래스를 만들어야 합니다. $Proxy0.
포장: 인터페이스가 필요하지 않지만 하나의 종류를 성명하고 피포장류의 하위 종류로 변하며 피포장류의 구성원을 가진다.
2: 프록시 기본 코드:
Object proxyedObj =
Proxy.newProxyInstance(ClassLoader,
New class[]{에이전트된 클래스의 인터페이스 배열.class},
New InvocationHandler () {//실행 핸들
Public Object invode(Object 에이전트, Method 메소드 반사, object[] args)
Reutrn method.invode (프록시 클래스,args);
}
}
3: 포장:
클래스가 패키지 클래스인 경우
A extends B{
Privet B b;
}
4: 포장, 에이전트 사용
공식 (SUN)에서 포장 어댑터를 제공했다면 포장을 우선적으로 사용해야 한다.예를 들어 HttpServletRequest와 같이 그의 포장 종류는 HtpServletRequestWraper이다.
만약 정부에서 포장 종류의 어댑터를 제공하지 않는다면 동적 에이전트를 사용할 수 있습니다.예: Connection
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java InputStream 에서 네트워크 응답 응답 응답 데 이 터 를 읽 는 방법!(중요)이 방법 은 읽 기와 쓰기 작업 전에 데이터 흐름 에 몇 개의 바이트 가 읽 을 수 있 는 지 알 수 있 습 니 다.주의해 야 할 것 은 이 방법 이 로 컬 파일 에서 데 이 터 를 읽 을 때 일반적으로 문제 가 발...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.