19 Nisan 2016 Salı

FileOutputStream Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.io.FileOutputStream;
constructor - string path
Şöyle yaparız.
String path = ...;
FileOutputStream fout = new FileOutputStream(path);
close metodu
Şöyle yaparız.
fout.close();
write metodu
Bir byte yazar. Şöyle yaparız.
int i;
fout.write(i);

15 Nisan 2016 Cuma

ReadWriteLock Arayüzü - Read ve Write Farkı Gözetir ve Reentrant'tır

Giriş
Şu satırı dahil ederiz.
import java.util.concurrent.locks.ReadWriteLock;
Açıklaması şöyle. Bu arayüzü gerçekleştiren tek sınıf ReentrantReadWriteLock.
A ReadWriteLock maintains a pair of associated locks, one for read-only operations and one for writing. The read lock may be held simultaneously by multiple reader threads, so long as there are no writers. The write lock is exclusive.
Kullanım
Örnek
Şöyle yaparız
public class Foo {
  ReadWriteLock lock = new ReentrantReadWriteLock();
  Lock readLock = lock.readLock();
  Lock writeLock = lock.writeLock();

  public void write (...) {
    writeLock.lock();
    try {
      ...
    } finally {
      writeLock.unlock();
    }
  }

  public void read (...) {
    readLock.lock();
    try {
      ...
    } finally {
      readLock.unlock();
    }
  }
}

11 Nisan 2016 Pazartesi

AtomicReferenceArray Sınıfı

constructor
Şöyle yaparız.
AtomicReferenceArray<Object> objects = new AtomicReferenceArray<>(100);
get metodu
Şöyle yaparız.
// reader
Object obj = objects.get(10);
set metodu
Şöyle yaparız.
// writer
objects.set(10, new Object());



30 Mart 2016 Çarşamba

XWPFDocument Sınıfı

Giriş
Bu sınıf .docx belgeleri için kullanılır.

constructor
Şöyle yaparız.
XWPFDocument document = new XWPFDocument(inStream);


WebServiceClient Sınıfı

Giriş
wsimport aracı ile wsdl'den dosyaları ürettikten sonra @WebService ve @WebServiceClient olarak işaretli iki dosya mevcuttur. @WebServiceClient olarak işaretli nesneyi yaratıp metodunu çağırırız.
WebServiceClient client = new WebServiceClient();
AnswerType answer = client.GetSoap().theMethodYouWantUse(some_parameters);
Eğer arayüz üzerinden gitmek çağrı yapmak isterse şöyle yaparız.
HelloWorldImplService helloService = new HelloWorldImplService();
HelloWorld hello = helloService.getHelloWorldImplPort();


22 Mart 2016 Salı

Kripto

SecretKeyFactory Sınıfı
SecretKeyFactory Sınıfı yazısına taşıdım.

KeyGenerator Sınıfı
getInstance metodu
Belirtilen kripto için nesne döndürür.
KeyGenerator keygenerator = KeyGenerator.getInstance("DES");
generateKey metodu
Key nesnesi üretir.
KeyGenerator keygenerator = KeyGenerator.getInstance("DES");
SecretKey myDesKey = keygenerator.generateKey();
SecretKeySpec
Constructor
Şöyle yaparız.
byte[] keyBytes = ...;
SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(keyBytes);
Bir string ile şöyle yaparız.
String secretKey = "0123456789abcdef";
SecretKeySpec keyspec = new SecretKeySpec(SecretKey.getBytes(), "AES");
IvParameterSpec
Bu sınıfı bir initialization vector sağlar. CBC modundaki cipher'larda kullanılır.
Constructor
Şöyle yaparız.
byte[] ivBytes = ...;
IvParameterSpec ivParameterSpec = new IvParameterSpec(keyBytes);
Bir string ile şöyle yaparız.
String iv = "fedcba9876543210";
IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
Cipher Sınıfı
Cipher Sınıfı yazısına taşıdım.

CipherOutputStream Sınıfı
Normal bir stream gibi kullanılır. write() flush() metodları vardır. Her stream'de olduğu gibi close() ile kapatılır
Constructor
Şöyle yaparız.
Cipher cipher = ...;
FileOutputStream fos = ...;
CipherOutputStream cos = new CipherOutputStream(fos, cipher);



Bit İşlemleri

Java'da Sayılar Unsigned Değildir
Özellikle C++'tan gelenlerin sıkça yaptığı bir hata. 32 bit sayıların kaydırılması için 64 bit kullanılır. Örneğin aşağıdaki kodda 1 signed bir değişken olduğu için istediğimiz sonucu elde etmeyiz.
938372878L | (1 << 31) //results to -1209110770
Şöyle yapmak gerekir.
938372878L | (1L << 31)
Faydalı metodlar
Java'da bitmask ile çalışmak yerine daha kolay metodlar var. highestOneBit, lowestOneBit, numberOfLeadingZeros, numberOfTrailingZeros gibi. Örnek:
assert 64 == Integer.highestOneBit(65);//00000000000000000000000001000001
assert 2 == Integer.bitCount(65);
assert 6 == 31 - Integer.numberOfLeadingZeros(65);//31 - 25
BitSet Sınıfı
BitSet Sınıfı yazısına taşıdım.