2013-02-21 2 views
1

Я делаю программу, которая должна отправлять зашифрованные данные с одного ПК на другой. Вместо того, чтобы явно зашифровывать/расшифровывать данные каждый раз, а затем отправлять их с помощью AsynchronousSocketChannel, мне было интересно, могу ли я как-то расширить функциональность AsynchronousSocketChannel.write и AsynchronousSocketChannel.read, чтобы сделать это для меня. Кажется, что AsynchronousSocketChannel.write является окончательным методом. Есть ли способ сделать мой собственный AsynchronousSocketChannel, или это противоречит интуиции?Создание собственного AsynchronousSocketChannel

Большое спасибо заранее.

ответ

1

Вы можете обернуть его в своем собственном классе:

import java.nio.ByteBuffer; 
import java.nio.channels.AsynchronousSocketChannel; 
import java.util.concurrent.Future; 

public class EncryptedAsynchronousSocketChannel { 
    private AsynchronousSocketChannel channel; 
    public Future<Integer> read(ByteBuffer dst){ 
     return channel.read(dst); 
    } 
    public Future<Integer> write(ByteBuffer src){ 
     return channel.write(src); 
    } 
} 
+0

Да, но тогда я не мог воспользоваться уже закодированных методов в AsynchronousSocketChannel. Является ли такая композиция единственным способом (легко) сделать это? – Alex

+0

просто создайте методы, которые вызывают методы с тем же именем в частном экземпляре, при необходимости изменяя параметры. В java это единственный способ, которым я знаю – Navin

+0

Это довольно распространенная проблема, когда люди пытаются улучшить класс String, который является окончательным. Другой способ - извлечь rt.jar и изменить класс, чтобы сделать его виртуальным, но я предполагаю, что вы не хотите изменять java-библиотеку. – Navin

Смежные вопросы